<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
        <meta data-rh="true" charset="utf-8" />
        <script>
        <![CDATA[
        !function(c,f){var t,o,i,e=[],r={passive:!0,capture:!0},n=new Date,a="pointerup",u="pointercancel";function p(n,e){t||(t=e,o=n,i=new Date,w(f),s())}function s(){0<=o&&o<i-n&&(e.forEach(function(n){n(o,t)}),e=[])}function l(n){if(n.cancelable){var e=(1e12<n.timeStamp?new Date:performance.now())-n.timeStamp;"pointerdown"==n.type?function(n,e){function t(){p(n,e),i()}function o(){i()}function i(){f(a,t,r),f(u,o,r)}c(a,t,r),c(u,o,r)}(e,n):p(e,n)}}function w(e){["click","mousedown","keydown","touchstart","pointerdown"].forEach(function(n){e(n,l,r)})}w(c),self.perfMetrics=self.perfMetrics||{},self.perfMetrics.onFirstInputDelay=function(n){e.push(n),s()}}(addEventListener,removeEventListener)
        ]]>
        </script>
        <title data-rh="true">
            Node.js and CPU profiling on production (in real-time without downtime)
        </title>
        <meta data-rh="true" name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1" />
        <meta data-rh="true" name="theme-color" content="#000000" />
        <meta data-rh="true" name="twitter:app:name:iphone" content="Medium" />
        <meta data-rh="true" name="twitter:app:id:iphone" content="828256236" />
        <meta data-rh="true" property="al:ios:app_name" content="Medium" />
        <meta data-rh="true" property="al:ios:app_store_id" content="828256236" />
        <meta data-rh="true" property="al:android:package" content="com.medium.reader" />
        <meta data-rh="true" property="fb:app_id" content="542599432471018" />
        <meta data-rh="true" property="og:site_name" content="Medium" />
        <meta data-rh="true" property="og:type" content="article" />
        <meta data-rh="true" property="article:published_time" content="2019-10-18T17:23:34.816Z" />
        <meta data-rh="true" name="title" content="Node.js and CPU profiling on production (in real-time without downtime)" />
        <meta data-rh="true" property="og:title" content="Node.js and CPU profiling on production (in real-time without downtime)" />
        <meta data-rh="true" property="twitter:title" content="Node.js and CPU profiling on production (in real-time without downtime)" />
        <meta data-rh="true" name="twitter:site" content="@Medium" />
        <meta data-rh="true" name="twitter:app:url:iphone" content="medium://p/d6e62af173e2" />
        <meta data-rh="true" property="al:android:url" content="medium://p/d6e62af173e2" />
        <meta data-rh="true" property="al:ios:url" content="medium://p/d6e62af173e2" />
        <meta data-rh="true" property="al:android:app_name" content="Medium" />
        <meta data-rh="true" name="description" content="How to run a CPU profiling with Node.js on your production in real-time and without interruption of service." />
        <meta data-rh="true" property="og:description" content="Why CPU monitoring is important?" />
        <meta data-rh="true" property="twitter:description" content="Why CPU monitoring is important?" />
        <meta data-rh="true" property="og:url" content="https://medium.com/voodoo-engineering/node-js-and-cpu-profiling-on-production-in-real-time-without-downtime-d6e62af173e2" />
        <meta data-rh="true" property="al:web:url" content="https://medium.com/voodoo-engineering/node-js-and-cpu-profiling-on-production-in-real-time-without-downtime-d6e62af173e2" />
        <meta data-rh="true" property="og:image" content="https://miro.medium.com/max/1200/1*EO-pr4RolgcAOj_Uk1rpDA.png" />
        <meta data-rh="true" name="twitter:image:src" content="https://miro.medium.com/max/1200/1*EO-pr4RolgcAOj_Uk1rpDA.png" />
        <meta data-rh="true" name="twitter:card" content="summary_large_image" />
        <meta data-rh="true" property="article:author" content="https://medium.com/@vincentvallet" />
        <meta data-rh="true" name="author" content="Vincent Vallet" />
        <meta data-rh="true" name="robots" content="index,follow" />
        <meta data-rh="true" name="referrer" content="unsafe-url" />
        <meta data-rh="true" name="twitter:label1" value="Reading time" />
        <meta data-rh="true" name="twitter:data1" value="8 min read" />
        <meta data-rh="true" name="parsely-post-id" content="d6e62af173e2" />
        <link data-rh="true" rel="search" type="application/opensearchdescription+xml" title="Medium" href="/osd.xml" />
        <link data-rh="true" rel="apple-touch-icon" sizes="152x152" href="https://cdn-images-1.medium.com/fit/c/152/152/1*8I-HPL0bfoIzGied-dzOvA.png" />
        <link data-rh="true" rel="apple-touch-icon" sizes="120x120" href="https://cdn-images-1.medium.com/fit/c/120/120/1*8I-HPL0bfoIzGied-dzOvA.png" />
        <link data-rh="true" rel="apple-touch-icon" sizes="76x76" href="https://cdn-images-1.medium.com/fit/c/76/76/1*8I-HPL0bfoIzGied-dzOvA.png" />
        <link data-rh="true" rel="apple-touch-icon" sizes="60x60" href="https://cdn-images-1.medium.com/fit/c/60/60/1*8I-HPL0bfoIzGied-dzOvA.png" />
        <link data-rh="true" rel="mask-icon" href="https://cdn-static-1.medium.com/_/fp/icons/monogram-mask.KPLCSFEZviQN0jQ7veN2RQ.svg" color="#171717" />
        <link data-rh="true" id="glyph_link" rel="stylesheet" type="text/css" href="https://glyph.medium.com/css/e/sr/latin/e/ssr/latin/e/ssb/latin/m2.css" />
        <link data-rh="true" rel="author" href="https://medium.com/@vincentvallet" />
        <link data-rh="true" rel="canonical" href="https://medium.com/voodoo-engineering/node-js-and-cpu-profiling-on-production-in-real-time-without-downtime-d6e62af173e2" />
        <link data-rh="true" rel="alternate" href="android-app://com.medium.reader/https/medium.com/p/d6e62af173e2" />
        <link data-rh="true" rel="icon" href="https://cdn-static-1.medium.com/_/fp/icons/favicon-rebrand-medium.3Y6xpZ-0FSdWDnPM3hSBIA.ico" />
        <script data-rh="true" type="application/ld+json">
        <![CDATA[
        {"@context":"http:\u002F\u002Fschema.org","@type":"NewsArticle","image":["https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F1200\u002F1*EO-pr4RolgcAOj_Uk1rpDA.png"],"url":"https:\u002F\u002Fmedium.com\u002Fvoodoo-engineering\u002Fnode-js-and-cpu-profiling-on-production-in-real-time-without-downtime-d6e62af173e2","dateCreated":"2019-10-18T17:23:34.816Z","datePublished":"2019-10-18T17:23:34.816Z","dateModified":"2019-10-18T17:23:35.066Z","headline":"Node.js and CPU profiling on production (in real-time without downtime)","name":"Node.js and CPU profiling on production (in real-time without downtime)","description":"How to run a CPU profiling with Node.js on your production in real-time and without interruption of service.","identifier":"d6e62af173e2","keywords":["Lite:true","Tag:Nodejs","Tag:Performance","Tag:Cpu","Tag:Profiling","Tag:Inspector","Publication:voodoo-engineering","Elevated:false","LockedPostSource:LOCKED_POST_SOURCE_NONE","LayerCake:0"],"author":{"@type":"Person","name":"Vincent Vallet","url":"https:\u002F\u002Fmedium.com\u002F@vincentvallet"},"creator":["Vincent Vallet"],"publisher":{"@type":"Organization","name":"Voodoo Engineering","url":"https:\u002F\u002Fmedium.com\u002Fvoodoo-engineering","logo":{"@type":"ImageObject","width":105,"height":60,"url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F210\u002F1*_LkVyEmY2-W1rlZD2__W5g.jpeg"}},"mainEntityOfPage":"https:\u002F\u002Fmedium.com\u002Fvoodoo-engineering\u002Fnode-js-and-cpu-profiling-on-production-in-real-time-without-downtime-d6e62af173e2"}
        ]]>
        </script>
        <script data-rh="true">
        <![CDATA[
        (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
        ga('create', 'UA-24232453-2', 'auto');
        ga('send', 'pageview');
        ]]>
        </script>
        <link rel="preload" href="https://cdn.optimizely.com/js/16180790160.js" as="script" />
        <style type="text/css" data-fela-rehydration="539" data-fela-type="STATIC">
        /*<![CDATA[*/
        html{box-sizing:border-box}*, *:before, *:after{box-sizing:inherit}body{margin:0;padding:0;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;color:rgba(0,0,0,0.8);position:relative;min-height:100vh}h1, h2, h3, h4, h5, h6, dl, dd, ol, ul, menu, figure, blockquote, p, pre, form{margin:0}menu, ol, ul{padding:0;list-style:none;list-style-image:none}main{display:block}a{color:inherit;text-decoration:none}a, button, input{-webkit-tap-highlight-color:transparent}img, svg{vertical-align:middle}button{background:transparent;overflow:visible}button, input, optgroup, select, textarea{margin:0}
        /*]]>*/
        </style>
        <style type="text/css" data-fela-rehydration="539" data-fela-type="KEYFRAME">
        /*<![CDATA[*/
        @-webkit-keyframes k1{0%{transform:scale(1);opacity:1}70%{transform:scale(1.4);opacity:0}100%{opacity:0}}@-moz-keyframes k1{0%{transform:scale(1);opacity:1}70%{transform:scale(1.4);opacity:0}100%{opacity:0}}@keyframes k1{0%{transform:scale(1);opacity:1}70%{transform:scale(1.4);opacity:0}100%{opacity:0}}
        /*]]>*/
        </style>
        <style type="text/css" data-fela-rehydration="539" data-fela-type="RULE">
        /*<![CDATA[*/
        .a{font-family:medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif}.b{font-weight:400}.c{background-color:rgba(255, 255, 255, 1)}.l{height:100vh}.m{width:100vw}.n{display:flex}.o{align-items:center}.p{justify-content:center}.q{fill:rgba(0, 0, 0, 0.84)}.r{display:block}.s{position:absolute}.t{top:0}.u{left:0}.v{right:0}.w{z-index:500}.x{box-shadow:0 4px 12px 0 rgba(0, 0, 0, 0.05)}.ag{max-width:1192px}.ah{min-width:0}.ai{width:100%}.aj{height:65px}.am{flex:1 0 auto}.an{border-left:1px solid rgba(0, 0, 0, 0.2)}.ao{margin-left:15px}.ap{margin-right:14px}.aq{height:24px}.ar{width:1px}.as{height:36px}.at{width:63px}.au{flex:0 0 auto}.av{visibility:hidden}.aw{margin-left:16px}.ax{font-family:medium-content-sans-serif-font, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Arial, sans-serif}.ay{font-style:normal}.az{line-height:20px}.ba{font-size:15.8px}.bb{letter-spacing:0px}.bc{color:rgba(0, 0, 0, 0.54)}.bd{fill:rgba(0, 0, 0, 0.54)}.be{color:rgba(28, 153, 99, 1)}.bf{fill:rgba(2, 184, 117, 1)}.bg{font-size:inherit}.bh{border:inherit}.bi{font-family:inherit}.bj{letter-spacing:inherit}.bk{font-weight:inherit}.bl{padding:0}.bm{margin:0}.bn:hover{cursor:pointer}.bo:hover{color:rgba(11, 59, 40, 1)}.bp:hover{fill:rgba(28, 153, 99, 1)}.bq:focus{outline:none}.br:disabled{cursor:default}.bs:disabled{color:rgba(52, 148, 166, 0.5)}.bt:disabled{fill:rgba(52, 148, 166, 0.5)}.bu{border-top:1px solid rgba(0, 0, 0, 0.1)}.bv{display:none}.bx{height:54px}.by{overflow:hidden}.bz{margin-right:40px}.ca{overflow:auto}.cb{flex:0 1 auto}.cc{list-style-type:none}.cd{line-height:40px}.ce{white-space:nowrap}.cf{overflow-x:auto}.cg{align-items:flex-start}.ch{margin-top:20px}.ci{padding-top:20px}.cj{height:80px}.ck{margin-bottom:0px}.cn{padding-left:24px}.co{padding-right:24px}.cp{margin-left:auto}.cq{margin-right:auto}.cr{max-width:728px}.cs{box-sizing:border-box}.ct{flex-direction:column}.cu{top:calc(100vh + 100px)}.cv{bottom:calc(100vh + 100px)}.cw{width:10px}.cx{pointer-events:none}.cy{word-break:break-word}.cz{word-wrap:break-word}.da:after{display:block}.db:after{content:""}.dc:after{clear:both}.dd{max-width:680px}.de{line-height:1.23}.df{letter-spacing:0}.dg{color:rgba(0, 0, 0, 0.84)}.dh{font-family:medium-content-title-font, Georgia, Cambria, "Times New Roman", Times, serif}.ds{margin-bottom:-0.27em}.dy{margin-top:32px}.dz{justify-content:space-between}.ed{border-radius:50%}.ee{height:48px}.ef{width:48px}.eg{margin-left:12px}.eh{margin-bottom:2px}.ej{font-weight:300}.ek{font-size:16px}.el{max-height:20px}.em{text-overflow:ellipsis}.en{display:-webkit-box}.eo{-webkit-line-clamp:1}.ep{-webkit-box-orient:vertical}.eq{color:inherit}.er{fill:inherit}.es:hover{text-decoration:underline}.et:disabled{color:rgba(0, 0, 0, 0.54)}.eu:disabled{fill:rgba(0, 0, 0, 0.54)}.ev{margin-left:8px}.ew{padding:0px 8px}.ex{background:0}.ey{border-color:rgba(0, 0, 0, 0.54)}.ez:hover{color:rgba(0, 0, 0, 0.97)}.fa:hover{fill:rgba(0, 0, 0, 0.97)}.fb:hover{border-color:rgba(0, 0, 0, 0.84)}.fc:disabled{fill:rgba(0, 0, 0, 0.76)}.fd:disabled{border-color:rgba(0, 0, 0, 0.2)}.fe:disabled{cursor:inherit}.ff:disabled:hover{color:rgba(0, 0, 0, 0.54)}.fg:disabled:hover{fill:rgba(0, 0, 0, 0.76)}.fh:disabled:hover{border-color:rgba(0, 0, 0, 0.2)}.fi{border-radius:4px}.fj{line-height:18px}.fk{font-size:15px}.fl{border-width:1px}.fm{border-style:solid}.fn{display:inline-block}.fo{text-decoration:none}.fp{align-items:flex-end}.fx{padding-right:6px}.fy:hover{color:rgba(0, 0, 0, 0.9)}.fz:hover{fill:rgba(0, 0, 0, 0.9)}.ga{margin-right:8px}.gb{margin-right:-6px}.gc{line-height:1.12}.gd{letter-spacing:-0.022em}.ge{font-weight:600}.gn{margin-bottom:-0.28em}.go{line-height:1.58}.gp{letter-spacing:-0.004em}.gq{font-family:medium-content-serif-font, Georgia, Cambria, "Times New Roman", Times, serif}.hb{margin-bottom:-0.46em}.hc{background-repeat:repeat-x}.hd{background-image:linear-gradient(to right,rgba(0, 0, 0, 0.84) 100%,rgba(0, 0, 0, 0.84) 0);background-image:url('data:image/svg+xml;utf8,<svg preserveAspectRatio="none" viewBox="0 0 1 1" xmlns="http://www.w3.org/2000/svg"><line x1="0" y1="0" x2="1" y2="1" stroke="rgba(0, 0, 0, 0.84)" /></svg>')}.he{background-size:1px 1px}.hf{background-position:0 1.05em;background-position:0 calc(1em + 1px)}.hl{max-width:1894px}.hr{clear:both}.hs{transition:transform 300ms cubic-bezier(0.2, 0, 0.2, 1)}.ht{cursor:zoom-in}.hu{position:relative}.hv{z-index:auto}.hw{opacity:0}.hx{transition:opacity 100ms 400ms}.hy{height:100%}.hz{will-change:transform}.ia{transform:translateZ(0)}.ib{margin:auto}.ic{background-color:rgba(0, 0, 0, 0.05)}.id{padding-bottom:51.21436114044351%}.ie{filter:blur(20px)}.if{transform:scale(1.1)}.ig{visibility:visible}.ih{background:rgba(255, 255, 255, 1)}.ii{line-height:1.4}.ij{margin-top:10px}.ik{text-align:center}.in{padding-left:30px}.io{line-height:1.48}.ip{letter-spacing:-0.014em}.iq{color:rgba(0, 0, 0, 0.76)}.ir{font-size:24px}.ix{font-size:30px}.iy{line-height:44px}.je{max-width:997px}.jf{padding-bottom:23.069207622868607%}.jl{line-height:1.18}.jw{margin-bottom:-0.31em}.jx{padding:20px}.jy{background:rgba(0, 0, 0, 0.05)}.jz{font-family:Menlo, Monaco, "Courier New", Courier, monospace}.ka{margin-top:-0.09em}.kb{margin-bottom:-0.09em}.kc{white-space:pre-wrap}.kd{max-width:849px}.ke{padding-bottom:62.897526501766784%}.kf{max-width:754px}.kg{padding-bottom:40.58355437665782%}.kh{max-width:2880px}.ki{padding-bottom:53.263888888888886%}.kj{font-weight:700}.kk{list-style-type:disc}.kl{margin-left:30px}.km{padding-left:0px}.ks{box-shadow:inset 3px 0 0 0 rgba(0, 0, 0, 0.84)}.kt{padding-left:23px}.ku{margin-left:-20px}.kv{font-style:italic}.kw{padding-bottom:NaN%}.kx{max-width:847px}.ky{padding-bottom:42.739079102715465%}.lh{padding-bottom:5px}.li{padding-top:5px}.lj{padding-bottom:61.88811188811189%}.lk{max-width:930px}.ll{padding-bottom:56.236559139784944%}.lm{max-width:1844px}.ln{padding-bottom:31.23644251626898%}.lo{max-width:845px}.lp{padding-bottom:42.840236686390526%}.lq{will-change:opacity}.lr{position:fixed}.ls{width:188px}.lt{left:50%}.lu{transform:translateX(406px)}.lv{top:calc(65px + 54px + 14px)}.ly{top:calc(65px + 54px + 40px)}.ma{width:131px}.mb{padding-bottom:28px}.mc{border-bottom:1px solid rgba(0, 0, 0, 0.1)}.md{font-size:18px}.me{padding-bottom:20px}.mf{padding-top:2px}.mg{max-height:120px}.mh{-webkit-line-clamp:6}.mi{padding:8px 16px}.mj{border-color:rgba(2, 184, 117, 1)}.mk:hover{border-color:rgba(28, 153, 99, 1)}.ml{padding-top:28px}.mm{margin-bottom:19px}.mn{margin-left:-3px}.mo{margin-right:5px}.mp{outline:0}.mq{border:0}.mr{user-select:none}.ms{cursor:pointer}.mt> svg{pointer-events:none}.mu:active{border-style:none}.mv{-webkit-user-select:none}.mw:focus{fill:rgba(28, 153, 99, 1)}.mx{margin-top:5px}.my button{text-align:left}.mz{margin-top:40px}.na{flex-wrap:wrap}.nb{margin-top:25px}.nc{margin-bottom:8px}.nd{border-radius:3px}.ne{padding:5px 10px}.nf{line-height:22px}.ng{margin-top:15px}.nh{margin-right:16px}.ni{border:1px solid rgba(0, 0, 0, 0.1)}.nj{height:60px}.nk{width:60px}.nx:active{border-style:solid}.ny{z-index:2}.oa{padding-right:8px}.ob{padding-top:32px}.oc{margin-bottom:25px}.od{margin-bottom:32px}.oe{min-height:80px}.oj{width:80px}.ok{padding-left:102px}.om{text-transform:uppercase}.on{letter-spacing:0.05em}.oo{margin-bottom:6px}.op{font-size:28px}.oq{line-height:36px}.or{padding:4px 12px}.os{max-width:555px}.ot{max-width:450px}.ou{line-height:24px}.ow{max-width:550px}.ox{padding-top:25px}.oy{opacity:1}.oz{border:1px solid rgba(2, 184, 117, 1)}.pa{margin-top:64px}.pb{background-color:rgba(0, 0, 0, 0.02)}.pc{margin:32px 0}.pe{padding-bottom:8px}.pf{font-size:22px}.pg{line-height:28px}.ph{flex-direction:row}.qo{flex-grow:0}.ri{margin-bottom:12px}.rk{margin-bottom:16px}.rm{padding-bottom:66.46341463414635%}.rn{background-image:url(https://miro.medium.com/max/656/1*PgziD8xisQlGXkWMjDGz5w.png)}.ro{background-origin:border-box}.rp{background-size:cover}.rq{background-position:50% 50%}.rr{max-width:100%}.rs{margin-bottom:4px}.ru{font-weight:500}.rv{line-height:32px}.rw{letter-spacing:0em}.rx{margin-right:10px}.ry{height:40px}.rz{width:40px}.sa{fill:rgba(0, 0, 0, 0.76)}.sb:focus{fill:rgba(0, 0, 0, 0.54)}.sc:hover{fill:rgba(0, 0, 0, 0.54)}.sd{border-right:1px solid rgba(0, 0, 0, 0.1)}.se{height:20px}.sf{background-image:url(https://miro.medium.com/max/656/1*flvQZznQlpVs26M6SCL7DA.jpeg)}.sg{background-image:url(https://miro.medium.com/max/656/0*sduEjXj8BCMSMYU1)}.sh{padding:60px 0}.si{background-color:rgba(0, 0, 0, 0.9)}.sz{padding-bottom:48px}.ta{border-bottom:1px solid rgba(255, 255, 255, 0.54)}.tb{margin:0 -12px}.tc{margin:0 12px}.td{flex:1 1 0}.te{padding-bottom:12px}.tf:hover{color:rgba(255, 255, 255, 0.99)}.tg:hover{fill:rgba(255, 255, 255, 0.99)}.th:disabled{color:rgba(255, 255, 255, 0.7)}.ti:disabled{fill:rgba(255, 255, 255, 0.7)}.tj{color:rgba(255, 255, 255, 0.98)}.tk{fill:rgba(255, 255, 255, 0.98)}.tl{text-align:inherit}.tm{font-size:21.6px}.tn{letter-spacing:-0.32px}.to{color:rgba(255, 255, 255, 0.7)}.tp{fill:rgba(255, 255, 255, 0.7)}.tq{text-decoration:underline}.tr{padding-top:8px}.ts{width:200px}
        /*]]>*/
        </style>
        <style type="text/css" data-fela-rehydration="539" data-fela-type="RULE" media="all and (min-width: 1080px)">
        /*<![CDATA[*/
        .d{display:none}.af{margin:0 64px}.dq{font-size:40px}.dr{margin-top:0.78em}.dx{line-height:48px}.fw{margin-left:30px}.gl{font-size:34px}.gm{margin-top:1.95em}.gz{font-size:21px}.ha{margin-top:0.86em}.hk{margin-top:2em}.hq{margin-top:56px}.iw{margin-top:2.75em}.jd{margin-top:3.14em}.jk{margin-top:1.75em}.ju{font-size:26px}.jv{margin-top:1.72em}.kr{margin-top:1.05em}.lg{max-width:1192px}.pu{width:calc(100% + 32px)}.pv{margin-left:-16px}.pw{margin-right:-16px}.qk{padding-left:16px}.ql{padding-right:16px}.qm{flex-basis:33.333333%}.qn{max-width:33.333333%}.qy{align-items:flex-start}.qz{flex-direction:row}.rg{flex-basis:100%}.rh{max-width:100%}.sw{padding-left:64px}.sx{padding-right:64px}.sy{max-width:1320px}
        /*]]>*/
        </style>
        <style type="text/css" data-fela-rehydration="539" data-fela-type="RULE" media="all and (max-width: 1079.98px)">
        /*<![CDATA[*/
        .e{display:none}.fv{margin-left:30px}.il{margin-left:auto}.im{text-align:center}.st{padding-left:64px}.su{padding-right:64px}.sv{max-width:1080px}
        /*]]>*/
        </style>
        <style type="text/css" data-fela-rehydration="539" data-fela-type="RULE" media="all and (max-width: 903.98px)">
        /*<![CDATA[*/
        .f{display:none}.fu{margin-left:30px}.pd{margin-bottom:0px}.qp{margin-bottom:48px}.rt{display:block}.sq{padding-left:48px}.sr{padding-right:48px}.ss{max-width:904px}
        /*]]>*/
        </style>
        <style type="text/css" data-fela-rehydration="539" data-fela-type="RULE" media="all and (max-width: 727.98px)">
        /*<![CDATA[*/
        .g{display:none}.ak{height:56px}.al{display:flex}.bw{display:block}.cl{margin-bottom:0px}.cm{height:110px}.eb{margin-top:32px}.ec{flex-direction:column-reverse}.fs{margin-bottom:30px}.ft{margin-left:0px}.of{margin-bottom:24px}.og{align-items:center}.oh{width:102px}.oi{position:relative}.ol{padding-left:0}.ov{margin-top:24px}.sj{padding:32px 0}.sn{padding-left:24px}.so{padding-right:24px}.sp{max-width:728px}.tt{width:140px}
        /*]]>*/
        </style>
        <style type="text/css" data-fela-rehydration="539" data-fela-type="RULE" media="all and (max-width: 551.98px)">
        /*<![CDATA[*/
        .h{display:none}.z{margin:0 24px}.di{font-size:30px}.dj{margin-top:0.72em}.dt{line-height:40px}.ea{margin-top:32px}.ei{margin-bottom:0px}.fq{margin-bottom:30px}.fr{margin-left:0px}.gf{margin-top:1.2em}.gr{font-size:18px}.gs{margin-top:0.67em}.hg{margin-top:1.56em}.hm{margin-top:40px}.is{margin-top:1.42em}.iz{margin-top:2em}.jg{margin-top:1.08em}.jm{font-size:24px}.jn{margin-top:1.23em}.kn{margin-top:1.34em}.kz{margin:0}.la{max-width:100%}.pi{width:calc(100% + 24px)}.pj{margin-left:-12px}.pk{margin-right:-12px}.px{padding-left:12px}.py{padding-right:12px}.pz{flex-basis:100%}.qq{align-items:flex-start}.qr{flex-direction:row}.rj{display:block}.rl{margin-bottom:16px}.sk{padding-left:24px}.sl{padding-right:24px}.sm{max-width:552px}
        /*]]>*/
        </style>
        <style type="text/css" data-fela-rehydration="539" data-fela-type="RULE" media="all and (min-width: 904px) and (max-width: 1079.98px)">
        /*<![CDATA[*/
        .i{display:none}.ae{margin:0 64px}.do{font-size:40px}.dp{margin-top:0.78em}.dw{line-height:48px}.gj{font-size:34px}.gk{margin-top:1.95em}.gx{font-size:21px}.gy{margin-top:0.86em}.hj{margin-top:2em}.hp{margin-top:56px}.iv{margin-top:2.75em}.jc{margin-top:3.14em}.jj{margin-top:1.75em}.js{font-size:26px}.jt{margin-top:1.72em}.kq{margin-top:1.05em}.lf{max-width:1192px}.pr{width:calc(100% + 32px)}.ps{margin-left:-16px}.pt{margin-right:-16px}.qg{padding-left:16px}.qh{padding-right:16px}.qi{flex-basis:33.333333%}.qj{max-width:33.333333%}.qw{align-items:flex-start}.qx{flex-direction:row}.re{flex-basis:100%}.rf{max-width:100%}
        /*]]>*/
        </style>
        <style type="text/css" data-fela-rehydration="539" data-fela-type="RULE" media="all and (min-width: 728px) and (max-width: 903.98px)">
        /*<![CDATA[*/
        .j{display:none}.ac{margin:0 48px}.dm{font-size:40px}.dn{margin-top:0.78em}.dv{line-height:48px}.gh{font-size:34px}.gi{margin-top:1.95em}.gv{font-size:21px}.gw{margin-top:0.86em}.hi{margin-top:2em}.ho{margin-top:56px}.iu{margin-top:2.75em}.jb{margin-top:3.14em}.ji{margin-top:1.75em}.jq{font-size:26px}.jr{margin-top:1.72em}.kp{margin-top:1.05em}.ld{margin:0}.le{max-width:100%}.po{width:calc(100% + 28px)}.pp{margin-left:-14px}.pq{margin-right:-14px}.qd{padding-left:14px}.qe{padding-right:14px}.qf{flex-basis:100%}.qu{align-items:center}.qv{flex-direction:row-reverse}.rc{flex-basis:50%}.rd{max-width:50%}
        /*]]>*/
        </style>
        <style type="text/css" data-fela-rehydration="539" data-fela-type="RULE" media="all and (min-width: 552px) and (max-width: 727.98px)">
        /*<![CDATA[*/
        .k{display:none}.ab{margin:0 24px}.dk{font-size:30px}.dl{margin-top:0.72em}.du{line-height:40px}.gg{margin-top:1.2em}.gt{font-size:18px}.gu{margin-top:0.67em}.hh{margin-top:1.56em}.hn{margin-top:40px}.it{margin-top:1.42em}.ja{margin-top:2em}.jh{margin-top:1.08em}.jo{font-size:24px}.jp{margin-top:1.23em}.ko{margin-top:1.34em}.lb{margin:0}.lc{max-width:100%}.pl{width:calc(100% + 24px)}.pm{margin-left:-12px}.pn{margin-right:-12px}.qa{padding-left:12px}.qb{padding-right:12px}.qc{flex-basis:100%}.qs{align-items:center}.qt{flex-direction:row-reverse}.ra{flex-basis:50%}.rb{max-width:50%}
        /*]]>*/
        </style>
        <style type="text/css" data-fela-rehydration="539" data-fela-type="RULE" media="print">
        /*<![CDATA[*/
        .y{display:none}
        /*]]>*/
        </style>
        <style type="text/css" data-fela-rehydration="539" data-fela-type="RULE" media="(prefers-reduced-motion: no-preference)">
        /*<![CDATA[*/
        .lw{transition:opacity 200ms}.nl{transition:border-color 150ms ease}.nm::before{background:
        radial-gradient(circle, rgba(28, 153, 99, 1) 60%, transparent 70%)
        }.nn::before{border-radius:50%}.no::before{content:""}.np::before{display:block}.nq::before{z-index:0}.nr::before{left:0}.ns::before{height:100%}.nt::before{position:absolute}.nu::before{top:0}.nv::before{width:100%}.nw:hover::before{animation:k1 2000ms infinite cubic-bezier(.1,.12,.25,1)}.nz{transition:fill 200ms ease}
        /*]]>*/
        </style>
        <style type="text/css" data-fela-rehydration="539" data-fela-type="RULE" media="all and (max-width: 1230px)">
        /*<![CDATA[*/
        .lx{display:none}
        /*]]>*/
        </style>
        <style type="text/css" data-fela-rehydration="539" data-fela-type="RULE" media="all and (max-width: 1198px)">
        /*<![CDATA[*/
        .lz{display:none}
        /*]]>*/
        </style>
    </head>
    <body>
        <div id="root">
            <div class="a b c">
                <div class="d e f g h i j k"></div>
                <script>
                <![CDATA[
                document.domain = document.domain;
                ]]>
                </script>
                <script>
                <![CDATA[
                window.PARSELY = window.PARSELY || {autotrack: false}
                ]]>
                </script>
                <nav class="r s t u v c w x y">
                    <div>
                        <div class="r c">
                            <div class="n p">
                                <div class="z ab ac ae af ag ah ai">
                                    <div class="aj n o ak al">
                                        <div class="n o am w">
                                            <a aria-label="Homepage" rel="noopener" href="/?source=post_page-----d6e62af173e2----------------------"><svg width="35" height="35" viewbox="5 5 35 35" class="q">
                                            <path d="M5 40V5h35v35H5zm8.56-12.63c0 .56-.03.69-.32 1.03L10.8 31.4v.4h6.97v-.4L15.3 28.4c-.29-.34-.34-.5-.34-1.03v-8.95l6.13 13.36h.71l5.26-13.36v10.64c0 .3 0 .35-.19.53l-1.85 1.8v.4h9.2v-.4l-1.83-1.8c-.18-.18-.2-.24-.2-.53V15.94c0-.3.02-.35.2-.53l1.82-1.8v-.4h-6.47l-4.62 11.55-5.2-11.54h-6.8v.4l2.15 2.63c.24.3.29.37.29.77v10.35z"></path></svg></a>
                                            <div class="an ao ap aq ar r g"></div>
                                            <div class="r g">
                                                <a href="/voodoo-engineering?source=post_page-----d6e62af173e2----------------------" rel="noopener">
                                                <div class="as at r">
                                                    <img alt="Voodoo Engineering" class="" src="https://miro.medium.com/max/126/1*_LkVyEmY2-W1rlZD2__W5g.jpeg" width="63" height="36" />
                                                </div></a>
                                            </div>
                                        </div>
                                        <div class="r au w">
                                            <div class="n o">
                                                <div class="n g">
                                                    <div class="av" id="lo-post-page-navbar-sign-in-link">
                                                        <div class="aw r">
                                                            <span class="ax b ay az ba bb r bc bd"><a href="https://medium.com/m/signin?operation=login&amp;redirect=https%3A%2F%2Fmedium.com%2Fvoodoo-engineering%2Fnode-js-and-cpu-profiling-on-production-in-real-time-without-downtime-d6e62af173e2&amp;source=post_page-----d6e62af173e2---------------------nav_reg-" class="be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt" rel="noopener">Sign in</a></span>
                                                        </div>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="bu bv c bw">
                            <div class="n p">
                                <div class="z ab ac ae af ag ah ai">
                                    <div class="bx by n o">
                                        <div class="bz r au">
                                            <a href="/voodoo-engineering?source=post_page-----d6e62af173e2----------------------" rel="noopener">
                                            <div class="as at r">
                                                <img alt="Voodoo Engineering" class="" src="https://miro.medium.com/max/126/1*_LkVyEmY2-W1rlZD2__W5g.jpeg" width="63" height="36" />
                                            </div></a>
                                        </div>
                                        <div class="ca r cb">
                                            <ul class="cc bm cd ce cf n cg g ch ci cj"></ul>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </nav>
                <div class="ck aj r cl cm"></div>
                <article>
                    <section class="cn co cp cq ai cr cs n ct"></section>
                    <div>
                        <div class="s u cu cv cw cx"></div>
                        <section class="cy cz da db dc">
                            <div class="n p">
                                <div class="z ab ac ae af dd ah ai">
                                    <div>
                                        <div id="daf0" class="de df dg ay dh b di dj dk dl dm dn do dp dq dr ds">
                                            <h1 class="dh b di dt dk du dm dv do dw dq dx dg">
                                                Node.js and CPU profiling on production (in real-time without downtime)
                                            </h1>
                                        </div>
                                        <div class="dy">
                                            <div class="n dz ea eb ec">
                                                <div class="o n">
                                                    <div>
                                                        <a rel="noopener" href="/@vincentvallet?source=post_page-----d6e62af173e2----------------------"><img alt="Vincent Vallet" class="r ed ee ef" src="https://miro.medium.com/fit/c/96/96/1*vFTVh_mYyf0p6m7f77A3vw.jpeg" width="48" height="48" /></a>
                                                    </div>
                                                    <div class="eg ai r">
                                                        <div class="n">
                                                            <div style="flex:1">
                                                                <div class="eh n o ei">
                                                                    <span class="ax b ay az ba bb r dg q"><span class="ax ej ek az by el em en eo ep dg"><a class="eq er bg bh bi bj bk bl bm bn es bq br et eu" rel="noopener" href="/@vincentvallet?source=post_page-----d6e62af173e2----------------------">Vincent Vallet</a></span></span>
                                                                    <div class="ev r au h">
                                                                        <button class="ew dg q ex ey ez fa fb bn et fc fd fe ff fg fh fi ax b ay fj fk bb fl fm cs fn fo bq">Follow</button>
                                                                    </div>
                                                                </div>
                                                            </div>
                                                        </div>
                                                        <div>
                                                            <span class="ax b ay az ba bb r bc bd"><a class="eq er bg bh bi bj bk bl bm bn es bq br et eu" rel="noopener" href="/voodoo-engineering/node-js-and-cpu-profiling-on-production-in-real-time-without-downtime-d6e62af173e2?source=post_page-----d6e62af173e2----------------------">Oct 18, 2019</a> <!-- -->·<!-- --> <!-- -->8<!-- --> min read</span>
                                                        </div>
                                                    </div>
                                                </div>
                                                <div class="n fp fq fr fs ft fu fv fw y">
                                                    <div class="n o">
                                                        <div class="fx r au">
                                                            <a href="//medium.com/p/d6e62af173e2/share/twitter?source=post_actions_header---------------------------" class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu" target="_blank" rel="noopener nofollow"><svg width="29" height="29" class="q">
                                                            <path d="M22.05 7.54a4.47 4.47 0 0 0-3.3-1.46 4.53 4.53 0 0 0-4.53 4.53c0 .35.04.7.08 1.05A12.9 12.9 0 0 1 5 6.89a5.1 5.1 0 0 0-.65 2.26c.03 1.6.83 2.99 2.02 3.79a4.3 4.3 0 0 1-2.02-.57v.08a4.55 4.55 0 0 0 3.63 4.44c-.4.08-.8.13-1.21.16l-.81-.08a4.54 4.54 0 0 0 4.2 3.15 9.56 9.56 0 0 1-5.66 1.94l-1.05-.08c2 1.27 4.38 2.02 6.94 2.02 8.3 0 12.86-6.9 12.84-12.85.02-.24 0-.43 0-.65a8.68 8.68 0 0 0 2.26-2.34c-.82.38-1.7.62-2.6.72a4.37 4.37 0 0 0 1.95-2.51c-.84.53-1.81.9-2.83 1.13z"></path></svg></a>
                                                        </div>
                                                        <div class="fx r au">
                                                            <button class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu"><svg width="29" height="29" viewbox="0 0 29 29" fill="none" class="q">
                                                            <path d="M5 6.36C5 5.61 5.63 5 6.4 5h16.2c.77 0 1.4.61 1.4 1.36v16.28c0 .75-.63 1.36-1.4 1.36H6.4c-.77 0-1.4-.6-1.4-1.36V6.36z"></path>
                                                            <path fill-rule="evenodd" clip-rule="evenodd" d="M10.76 20.9v-8.57H7.89v8.58h2.87zm-1.44-9.75c1 0 1.63-.65 1.63-1.48-.02-.84-.62-1.48-1.6-1.48-.99 0-1.63.64-1.63 1.48 0 .83.62 1.48 1.59 1.48h.01zM12.35 20.9h2.87v-4.79c0-.25.02-.5.1-.7.2-.5.67-1.04 1.46-1.04 1.04 0 1.46.8 1.46 1.95v4.59h2.87v-4.92c0-2.64-1.42-3.87-3.3-3.87-1.55 0-2.23.86-2.61 1.45h.02v-1.24h-2.87c.04.8 0 8.58 0 8.58z" fill="#fff"></path></svg></button>
                                                        </div>
                                                        <div class="fx r au">
                                                            <a href="//medium.com/p/d6e62af173e2/share/facebook?source=post_actions_header---------------------------" class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu" target="_blank" rel="noopener nofollow"><svg width="29" height="29" class="q">
                                                            <path d="M23.2 5H5.8a.8.8 0 0 0-.8.8V23.2c0 .44.35.8.8.8h9.3v-7.13h-2.38V13.9h2.38v-2.38c0-2.45 1.55-3.66 3.74-3.66 1.05 0 1.95.08 2.2.11v2.57h-1.5c-1.2 0-1.48.57-1.48 1.4v1.96h2.97l-.6 2.97h-2.37l.05 7.12h5.1a.8.8 0 0 0 .79-.8V5.8a.8.8 0 0 0-.8-.79"></path></svg></a>
                                                        </div>
                                                        <div class="ga r">
                                                            <a href="https://medium.com/m/signin?operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fvoodoo-engineering%2Fnode-js-and-cpu-profiling-on-production-in-real-time-without-downtime-d6e62af173e2&amp;source=post_actions_header--------------------------bookmark_sidebar-" class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu" rel="noopener"><svg width="25" height="25" viewbox="0 0 25 25">
                                                            <path d="M19 6a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v14.66h.01c.01.1.05.2.12.28a.5.5 0 0 0 .7.03l5.67-4.12 5.66 4.13a.5.5 0 0 0 .71-.03.5.5 0 0 0 .12-.29H19V6zm-6.84 9.97L7 19.64V6a1 1 0 0 1 1-1h9a1 1 0 0 1 1 1v13.64l-5.16-3.67a.49.49 0 0 0-.68 0z" fill-rule="evenodd"></path></svg></a>
                                                        </div>
                                                        <div class="gb r am"></div>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                    <h1 id="0231" class="gc gd dg ay ax ge di gf dk gg gh gi gj gk gl gm gn">
                                        Why CPU monitoring is important?
                                    </h1>
                                    <p id="d2c1" class="go gp dg ay gq b gr gs gt gu gv gw gx gy gz ha hb cy">
                                        I work at <a href="http://voodoo.io/" class="eq fo hc hd he hf" target="_blank" rel="noopener nofollow">Voodoo</a>, a French company that creates mobile video games. We have a lot of challenges with performance, availability, and scalability because of the insane amount of traffic our infrastructure supports (billions of events/requests per day …… no joke!). In this setting, every metric is important and gives us a lot of information about the state of our system.
                                    </p>
                                    <p id="0e89" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        When working with Node.js one of the most critical resources to monitor is the CPU. Most of the time, when working on a low traffic API or project we don’t realize how many simple lines of code can have a huge impact on CPU. On the other hand, when traffic increases, a simple mistake can cost dearly.
                                    </p>
                                    <h1 id="292e" class="gc gd dg ay ax ge di gf dk gg gh gi gj gk gl gm gn">
                                        Resources
                                    </h1>
                                    <p id="1efa" class="go gp dg ay gq b gr gs gt gu gv gw gx gy gz ha hb cy">
                                        What kind of resources does your application need? In most cases, we focus on memory and CPU. Good monitoring of these two elements is mandatory for an application running on production.
                                    </p>
                                    <p id="dce9" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        For memory, constant monitoring is the best practice to track the worst developer nightmare a.k.a memory leak.
                                    </p>
                                    <figure class="hm hn ho hp hq hr cp cq paragraph-image">
                                        <div class="hs ht hu hv ai">
                                            <div class="cp cq hl">
                                                <div class="ib r hu ic">
                                                    <div class="id r">
                                                        <div class="hw hx s t u hy ai by hz ia">
                                                            <img class="s t u hy ai ie if ig" src="https://miro.medium.com/max/60/1*5o3M5niyi911waUrKWVZ0Q.png?q=20" width="1894" height="970" role="presentation" />
                                                        </div><img class="hw hx s t u hy ai ih" width="1894" height="970" role="presentation" /><noscript><img class="s t u hy ai" src="https://miro.medium.com/max/3788/1*5o3M5niyi911waUrKWVZ0Q.png" width="1894" height="970" role="presentation" /></noscript>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                        <figcaption class="bc ek ii ij ik cr cp cq il im ax ej">
                                            Memory leak in action
                                        </figcaption>
                                    </figure>
                                    <p id="69dd" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        A good way to debug memory leak is a memory dump and/or memory sampling but this is not the subject.
                                    </p>
                                    <p id="1fbc" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        (for more details about V8 and its garbage collector you can read my previous article <a class="eq fo hc hd he hf" target="_blank" rel="noopener" href="/voodoo-engineering/nodejs-internals-v8-garbage-collector-a6eca82540ec">here</a>)
                                    </p>
                                    <blockquote class="in">
                                        <div id="6f9a" class="io ip iq ay dh b ir is it iu iv iw hb">
                                            <p class="dh b ix iy bc">
                                                Stay focused on the CPU!
                                            </p>
                                        </div>
                                    </blockquote>
                                    <p id="40e6" class="go gp dg ay gq b gr iz gt ja gv jb gx jc gz jd hb cy">
                                        Most of the time we monitor this resource with a simple solution allowing us to get a graph representing CPU consumption over time. If we want to be reactive we add an alarm, based on a threshold, to warn us when CPU usage is too high.
                                    </p>
                                    <figure class="hm hn ho hp hq hr cp cq paragraph-image">
                                        <div class="hs ht hu hv ai">
                                            <div class="cp cq je">
                                                <div class="ib r hu ic">
                                                    <div class="jf r">
                                                        <div class="hw hx s t u hy ai by hz ia">
                                                            <img class="s t u hy ai ie if ig" src="https://miro.medium.com/max/60/1*8uOdeOfnUzTaFIY1r7oAMg.png?q=20" width="997" height="230" role="presentation" />
                                                        </div><img class="hw hx s t u hy ai ih" width="997" height="230" role="presentation" /><noscript><img class="s t u hy ai" src="https://miro.medium.com/max/1994/1*8uOdeOfnUzTaFIY1r7oAMg.png" width="997" height="230" role="presentation" /></noscript>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                        <figcaption class="bc ek ii ij ik cr cp cq il im ax ej">
                                            Basic CPU monitoring
                                        </figcaption>
                                    </figure>
                                    <p id="0728" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        And what next? We don’t have data about the state of the instance when the CPU usage has increased. So we can’t determine why we had this peak, at least not without an important time of debugging, comparing log, etc. This is exactly why you need to use CPU profiling.
                                    </p>
                                    <h1 id="8d00" class="gc gd dg ay ax ge di gf dk gg gh gi gj gk gl gm gn">
                                        CPU profiling: what’s the difference with CPU monitoring?
                                    </h1>
                                    <blockquote class="in">
                                        <div id="19fb" class="io ip iq ay dh b ir jg jh ji jj jk hb">
                                            <p class="dh b ix iy bc">
                                                “Most commonly, profiling information serves to aid program optimization. Profiling is achieved by instrumenting either the program source code or its binary executable form using a tool called a profiler”
                                            </p>
                                        </div>
                                    </blockquote>
                                    <p id="3e11" class="go gp dg ay gq b gr iz gt ja gv jb gx jc gz jd hb cy">
                                        Basically, for Node.js, CPU profiling is nothing more than collecting data about functions which are CPU consuming. And ideally, get a graphic representation of the collected data a.k.a “flame graph” or “flame chart”.
                                    </p>
                                    <p id="91c5" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        It will help you to track the exact file, line, and function which takes the most time to execute.
                                    </p>
                                    <h1 id="088b" class="gc gd dg ay ax ge di gf dk gg gh gi gj gk gl gm gn">
                                        What about existing solutions?
                                    </h1>
                                    <h2 id="dd40" class="jl gd dg ay ax ge jm jn jo jp jq jr js jt ju jv jw">
                                        Add arguments to Node.js
                                    </h2>
                                    <p id="0306" class="go gp dg ay gq b gr gs gt gu gv gw gx gy gz ha hb cy">
                                        Node.js provides a way to collect data about CPU with two command lines.
                                    </p>
                                    <p id="66c8" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        The first command just executes your application, the argument just tells to V8 engine to collect data. When you stop your script all information is stored in a file.
                                    </p>
                                    <pre class="hm hn ho hp hq jx jy cf"><span id="16bd" class="jl gd dg ay jz b ek ka kb r kc">node --prof app.js</span></pre>
                                    <figure class="hm hn ho hp hq hr cp cq paragraph-image">
                                        <div class="hs ht hu hv ai">
                                            <div class="cp cq kd">
                                                <div class="ib r hu ic">
                                                    <div class="ke r">
                                                        <div class="hw hx s t u hy ai by hz ia">
                                                            <img class="s t u hy ai ie if ig" src="https://miro.medium.com/max/60/1*e7gjTlzi55udTXbbPeEs2A.png?q=20" width="849" height="534" role="presentation" />
                                                        </div><img class="hw hx s t u hy ai ih" width="849" height="534" role="presentation" /><noscript><img class="s t u hy ai" src="https://miro.medium.com/max/1698/1*e7gjTlzi55udTXbbPeEs2A.png" width="849" height="534" role="presentation" /></noscript>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                        <figcaption class="bc ek ii ij ik cr cp cq il im ax ej">
                                            Output of — prof
                                        </figcaption>
                                    </figure>
                                    <p id="57a6" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        It is not very clear, is it?
                                    </p>
                                    <p id="abed" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        That’s why you just need to run this second command to transform your raw file into a more human-readable output.
                                    </p>
                                    <pre class="hm hn ho hp hq jx jy cf"><span id="061c" class="jl gd dg ay jz b ek ka kb r kc">node --prof-process isolate-0xnnnnn-v8.log &gt; processed.txt</span></pre>
                                    <figure class="hm hn ho hp hq hr cp cq paragraph-image">
                                        <div class="hs ht hu hv ai">
                                            <div class="cp cq kf">
                                                <div class="ib r hu ic">
                                                    <div class="kg r">
                                                        <div class="hw hx s t u hy ai by hz ia">
                                                            <img class="s t u hy ai ie if ig" src="https://miro.medium.com/max/60/1*JJkRh7JihTUo2apW_9ZXAQ.png?q=20" width="754" height="306" role="presentation" />
                                                        </div><img class="hw hx s t u hy ai ih" width="754" height="306" role="presentation" /><noscript><img class="s t u hy ai" src="https://miro.medium.com/max/1508/1*JJkRh7JihTUo2apW_9ZXAQ.png" width="754" height="306" role="presentation" /></noscript>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                        <figcaption class="bc ek ii ij ik cr cp cq il im ax ej">
                                            The output of — prof-process
                                        </figcaption>
                                    </figure>
                                    <p id="85fa" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        It seems better, here you can determine which function consumes the most of CPU (percentage of the time).
                                    </p>
                                    <h2 id="9e54" class="jl gd dg ay ax ge jm jn jo jp jq jr js jt ju jv jw">
                                        ClinicJs
                                    </h2>
                                    <p id="176a" class="go gp dg ay gq b gr gs gt gu gv gw gx gy gz ha hb cy">
                                        ClinicJs is a set of tools that allow you to collect data and display performance charts. With “clinic flame” you can generate a flame graph based on CPU consumption.
                                    </p>
                                    <figure class="hm hn ho hp hq hr cp cq paragraph-image">
                                        <div class="hs ht hu hv ai">
                                            <div class="cp cq kh">
                                                <div class="ib r hu ic">
                                                    <div class="ki r">
                                                        <div class="hw hx s t u hy ai by hz ia">
                                                            <img class="s t u hy ai ie if ig" src="https://miro.medium.com/max/60/1*6wi5BlNNnykjZs0PufrvLQ.png?q=20" width="2880" height="1534" role="presentation" />
                                                        </div><img class="hw hx s t u hy ai ih" width="2880" height="1534" role="presentation" /><noscript><img class="s t u hy ai" src="https://miro.medium.com/max/5760/1*6wi5BlNNnykjZs0PufrvLQ.png" width="2880" height="1534" role="presentation" /></noscript>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                        <figcaption class="bc ek ii ij ik cr cp cq il im ax ej">
                                            Flame chart
                                        </figcaption>
                                    </figure>
                                    <p id="5347" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        But once again, you have to stop your app, launch the tool, then terminate the script in order to display the graph (files are generated on the disk).
                                    </p>
                                    <p id="d6e6" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        For more details, you can see the <a href="https://clinicjs.org/" class="eq fo hc hd he hf" target="_blank" rel="noopener nofollow">project</a>.
                                    </p>
                                    <p id="be18" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        <strong class="gq kj">To sum up</strong>, here is the list of drawbacks of the two previous solutions.
                                    </p>
                                    <ul class="">
                                        <li id="3bef" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb kk kl km">Downtime (you should kill your application to collect the data)
                                        </li>
                                        <li id="c0df" class="go gp dg ay gq b gr kn gt ko gv kp gx kq gz kr hb kk kl km">Performance overhead
                                        </li>
                                        <li id="27ec" class="go gp dg ay gq b gr kn gt ko gv kp gx kq gz kr hb kk kl km">Data collected locally
                                        </li>
                                        <li id="a4fd" class="go gp dg ay gq b gr kn gt ko gv kp gx kq gz kr hb kk kl km">Need external tools (ClinicJs)
                                        </li>
                                    </ul>
                                    <p id="3f2c" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        In conclusion: these are good solutions to debug on development environments and/or on a local machine.
                                    </p>
                                    <blockquote class="ks kt ku">
                                        <p id="fcd9" class="go gp dg kv gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                            Unfortunately, CPU issues have a worrying tendency to occur on production, and when you are not in front of your screen.
                                        </p>
                                    </blockquote>
                                    <h1 id="13ef" class="gc gd dg ay ax ge di gf dk gg gh gi gj gk gl gm gn">
                                        Inspector
                                    </h1>
                                    <p id="294e" class="go gp dg ay gq b gr gs gt gu gv gw gx gy gz ha hb cy">
                                        “Inspector” refers to an API thanks to which you can debug your application. By debugging we mean to be able to connect directly to the core of Node.js to collect real-time data about the process.
                                    </p>
                                    <p id="ea23" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        A module, available since version 8.x of Node.js, provides this kind of feature. There are two advantages to use it:
                                    </p>
                                    <ul class="">
                                        <li id="ed54" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb kk kl km">it’s native (no additional installation required)
                                        </li>
                                        <li id="7992" class="go gp dg ay gq b gr kn gt ko gv kp gx kq gz kr hb kk kl km">it can be used programmatically (no interruption)
                                        </li>
                                    </ul>
                                    <p id="731f" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        And here is how to make a CPU profiling with this module:
                                    </p>
                                    <figure class="hm hn ho hp hq hr">
                                        <div class="ib r hu">
                                            <div class="kw r">
                                                <iframe src="https://medium.com/media/e6590d28762ae9dc52a79fab03d9bfb4" allowfullscreen="allowfullscreen" frameborder="0" height="0" width="0" title="CPU profiling with inspector" class="s t u hy ai" scrolling="auto"></iframe>
                                            </div>
                                        </div>
                                    </figure>
                                    <p id="79d1" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        As you can see, all the data is returned in variable “profile”. Basically, it’s a simple JSON object representing all the call stack and the CPU consumption for each function. And if you want to use an Async/await syntax you can install the module “inspector-api”.
                                    </p>
                                    <pre class="hm hn ho hp hq jx jy cf"><span id="c085" class="jl gd dg ay jz b ek ka kb r kc">npm install inspector-api --save</span></pre>
                                    <p id="195d" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        It also comes with a built-in exporter to send data to S3, with this method <strong class="gq kj">you don’t write anything on the disk</strong>!
                                    </p>
                                    <figure class="hm hn ho hp hq hr">
                                        <div class="ib r hu">
                                            <div class="kw r">
                                                <iframe src="https://medium.com/media/a5c2cfaff5b466e10f3f24ac0dee3dd1" allowfullscreen="allowfullscreen" frameborder="0" height="0" width="0" title="CPU profiling with inspector-api module" class="s t u hy ai" scrolling="auto"></iframe>
                                            </div>
                                        </div>
                                    </figure>
                                    <p id="964f" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        If you use another storage system you can just collect the data and export it by yourself.
                                    </p>
                                    <figure class="hm hn ho hp hq hr">
                                        <div class="ib r hu">
                                            <div class="kw r">
                                                <iframe src="https://medium.com/media/a258a6f9cd216401571004e3dffd693b" allowfullscreen="allowfullscreen" frameborder="0" height="0" width="0" title="CPU profiling" class="s t u hy ai" scrolling="auto"></iframe>
                                            </div>
                                        </div>
                                    </figure>
                                    <h1 id="848b" class="gc gd dg ay ax ge di gf dk gg gh gi gj gk gl gm gn">
                                        And now, CPU profiling on-demand!
                                    </h1>
                                    <p id="6933" class="go gp dg ay gq b gr gs gt gu gv gw gx gy gz ha hb cy">
                                        We have an API that we want to test with autocannon tool. At this step, our project is able to serve around 200 requests in 20 seconds. There is probably a mistake somewhere in the code which slows down our application.
                                    </p>
                                    <figure class="hm hn ho hp hq hr cp cq paragraph-image">
                                        <div class="hs ht hu hv ai">
                                            <div class="cp cq kx">
                                                <div class="ib r hu ic">
                                                    <div class="ky r">
                                                        <div class="hw hx s t u hy ai by hz ia">
                                                            <img class="s t u hy ai ie if ig" src="https://miro.medium.com/max/60/1*cS9IXYGfMmgxaAUlC7oqOQ.png?q=20" width="847" height="362" role="presentation" />
                                                        </div><img class="hw hx s t u hy ai ih" width="847" height="362" role="presentation" /><noscript><img class="s t u hy ai" src="https://miro.medium.com/max/1694/1*cS9IXYGfMmgxaAUlC7oqOQ.png" width="847" height="362" role="presentation" /></noscript>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                    </figure>
                                    <p id="fb78" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        But now, what if we want to trigger a CPU profiling remotely (without ssh connection to the server)? It’s possible using Websocket, SSE or any other technology to send a message to your instance.
                                    </p>
                                    <p id="2c91" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        Here is a simple example of a server using the “ws” module to send a message to a unique instance.
                                    </p>
                                    <figure class="hm hn ho hp hq hr">
                                        <div class="ib r hu">
                                            <div class="kw r">
                                                <iframe src="https://medium.com/media/feef2118ed0761bda1c2821a47c2297b" allowfullscreen="allowfullscreen" frameborder="0" height="0" width="0" title="WS server" class="s t u hy ai" scrolling="auto"></iframe>
                                            </div>
                                        </div>
                                    </figure>
                                    <p id="2206" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        Of course, it only works with one instance, but it’s a fake project to demonstrate the principle ;)
                                    </p>
                                    <p id="e92d" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        Now we can request our server to ask it to send a message to our instance and start/stop a CPU profiling. In your instance, you can handle the CPU profiling like this:
                                    </p>
                                    <figure class="hm hn ho hp hq hr">
                                        <div class="ib r hu">
                                            <div class="kw r">
                                                <iframe src="https://medium.com/media/8a678f3011fef4d2c8296408f0b552fe" allowfullscreen="allowfullscreen" frameborder="0" height="0" width="0" title="WS client side" class="s t u hy ai" scrolling="auto"></iframe>
                                            </div>
                                        </div>
                                    </figure>
                                    <p id="c3d0" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        <strong class="gq kj">To sum up</strong>: we are able to trigger a CPU profiling, on-demand, in real-time, without interruption or connection to the server. Data can be collected on the disk (and extracted later) or can be sent to S3 (or any other system, PR are welcomed on the <a href="https://github.com/wallet77/v8-inspector-api" class="eq fo hc hd he hf" target="_blank" rel="noopener nofollow">inspector-api project</a>).
                                    </p>
                                    <blockquote class="ks kt ku">
                                        <p id="6e87" class="go gp dg kv gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                            And because the profiler is a part of V8 itself, the format of the generated JSON file is compatible with the Chrome dev tools.
                                        </p>
                                    </blockquote>
                                </div>
                            </div>
                            <div class="hr">
                                <div class="n p">
                                    <div class="kz la lb lc ld le ae lf af lg ah ai">
                                        <figure class="hm hn ho hp hq hr lh li paragraph-image">
                                            <div class="hs ht hu hv ai">
                                                <div class="cp cq ag">
                                                    <div class="ib r hu ic">
                                                        <div class="lj r">
                                                            <div class="hw hx s t u hy ai by hz ia">
                                                                <img alt="CPU profiling before optimization" class="s t u hy ai ie if ig" src="https://miro.medium.com/max/60/1*CANkRN_yzl9tfrGd2F41wQ.png?q=20" width="1144" height="708" />
                                                            </div><img alt="CPU profiling before optimization" class="hw hx s t u hy ai ih" width="1144" height="708" /><noscript><img alt="CPU profiling before optimization" class="s t u hy ai" src="https://miro.medium.com/max/2288/1*CANkRN_yzl9tfrGd2F41wQ.png" width="1144" height="708" /></noscript>
                                                        </div>
                                                    </div>
                                                </div>
                                            </div>
                                            <figcaption class="bc ek ii ij ik cr cp cq il im ax ej">
                                                CPU profiling before optimization
                                            </figcaption>
                                        </figure>
                                    </div>
                                </div>
                            </div>
                            <div class="n p">
                                <div class="z ab ac ae af dd ah ai">
                                    <p id="2cda" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        <strong class="gq kj">How can we identify an issue?</strong>
                                    </p>
                                    <p id="e0d2" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        A CPU profiling should be read like this:
                                    </p>
                                    <ul class="">
                                        <li id="27e6" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb kk kl km">the x-axis shows the stack profile population
                                        </li>
                                        <li id="194a" class="go gp dg ay gq b gr kn gt ko gv kp gx kq gz kr hb kk kl km">the y-axis shows stack depth
                                        </li>
                                    </ul>
                                    <p id="e950" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        <strong class="gq kj">What does it mean?</strong>
                                    </p>
                                    <p id="174c" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        The larger is a box (a function call) the more it consumed CPU. So a good CPU profiling should look like a “flame” graph where each stack is the finest possible.
                                    </p>
                                    <p id="48d9" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        In our example, every request try to generate a token. For this purpose, it calls the function pbkdf2 which is CPU consuming. Our CPU profile looks like a sequence of big blocks of time, like if the last function in the call stack takes 99% of the total time.
                                    </p>
                                    <p id="d62c" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        The CPU profiling after optimizations, with the same time range.
                                    </p>
                                    <figure class="hm hn ho hp hq hr cp cq paragraph-image">
                                        <div class="hs ht hu hv ai">
                                            <div class="cp cq lk">
                                                <div class="ib r hu ic">
                                                    <div class="ll r">
                                                        <div class="hw hx s t u hy ai by hz ia">
                                                            <img class="s t u hy ai ie if ig" src="https://miro.medium.com/max/60/1*87KlGgfbuWP38nAaQaj3xw.png?q=20" width="930" height="523" role="presentation" />
                                                        </div><img class="hw hx s t u hy ai ih" width="930" height="523" role="presentation" /><noscript><img class="s t u hy ai" src="https://miro.medium.com/max/1860/1*87KlGgfbuWP38nAaQaj3xw.png" width="930" height="523" role="presentation" /></noscript>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                        <figcaption class="bc ek ii ij ik cr cp cq il im ax ej">
                                            CPU profiling after optimizations
                                        </figcaption>
                                    </figure>
                                    <p id="10ee" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        As you can notice, we have to zoom to the profile if we want to see the call stack, because after optimizations the API was able to take a lot more traffic. Now every function in the call stack looks like a microtask.
                                    </p>
                                </div>
                            </div>
                            <div class="hr">
                                <div class="n p">
                                    <div class="kz la lb lc ld le ae lf af lg ah ai">
                                        <figure class="hm hn ho hp hq hr lh li paragraph-image">
                                            <div class="hs ht hu hv ai">
                                                <div class="cp cq lm">
                                                    <div class="ib r hu ic">
                                                        <div class="ln r">
                                                            <div class="hw hx s t u hy ai by hz ia">
                                                                <img alt="CPU profiling after optimization" class="s t u hy ai ie if ig" src="https://miro.medium.com/max/60/1*EO-pr4RolgcAOj_Uk1rpDA.png?q=20" width="1844" height="576" />
                                                            </div><img alt="CPU profiling after optimization" class="hw hx s t u hy ai ih" width="1844" height="576" /><noscript><img alt="CPU profiling after optimization" class="s t u hy ai" src="https://miro.medium.com/max/3688/1*EO-pr4RolgcAOj_Uk1rpDA.png" width="1844" height="576" /></noscript>
                                                        </div>
                                                    </div>
                                                </div>
                                            </div>
                                            <figcaption class="bc ek ii ij ik cr cp cq il im ax ej">
                                                Zoom in the CPU profiling
                                            </figcaption>
                                        </figure>
                                    </div>
                                </div>
                            </div>
                            <div class="n p">
                                <div class="z ab ac ae af dd ah ai">
                                    <p id="10f1" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        And now our application is able to serve more than 200,000 requests in 20 seconds; <strong class="gq kj">we increased the performance by a factor of 100k</strong>!
                                    </p>
                                    <figure class="hm hn ho hp hq hr cp cq paragraph-image">
                                        <div class="hs ht hu hv ai">
                                            <div class="cp cq lo">
                                                <div class="ib r hu ic">
                                                    <div class="lp r">
                                                        <div class="hw hx s t u hy ai by hz ia">
                                                            <img class="s t u hy ai ie if ig" src="https://miro.medium.com/max/60/1*kfOK60PtmWx6iP681-qRcg.png?q=20" width="845" height="362" role="presentation" />
                                                        </div><img class="hw hx s t u hy ai ih" width="845" height="362" role="presentation" /><noscript><img class="s t u hy ai" src="https://miro.medium.com/max/1690/1*kfOK60PtmWx6iP681-qRcg.png" width="845" height="362" role="presentation" /></noscript>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                    </figure>
                                    <h1 id="98b9" class="gc gd dg ay ax ge di gf dk gg gh gi gj gk gl gm gn">
                                        More than just CPU profiling
                                    </h1>
                                    <p id="e1ad" class="go gp dg ay gq b gr gs gt gu gv gw gx gy gz ha hb cy">
                                        With the inspector module, you can do much more than just CPU profiling, here is a non-exhaustive list:
                                    </p>
                                    <ul class="">
                                        <li id="eb04" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb kk kl km">memory dump &amp; memory sampling
                                        </li>
                                        <li id="a9ea" class="go gp dg ay gq b gr kn gt ko gv kp gx kq gz kr hb kk kl km">code coverage
                                        </li>
                                        <li id="b896" class="go gp dg ay gq b gr kn gt ko gv kp gx kq gz kr hb kk kl km">use the debugger in real-time
                                        </li>
                                    </ul>
                                    <h1 id="06d2" class="gc gd dg ay ax ge di gf dk gg gh gi gj gk gl gm gn">
                                        Warnings
                                    </h1>
                                    <p id="731b" class="go gp dg ay gq b gr gs gt gu gv gw gx gy gz ha hb cy">
                                        Every tool, even the most powerful, comes with its own disadvantages. If you enable the profiler and/or the debugger on your production you have to keep an eye on two things:
                                    </p>
                                    <p id="e485" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        <strong class="gq kj">1) performance overhead</strong>
                                    </p>
                                    <p id="0513" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        A profiler needs to use CPU to work and it collects data into memory. The longer you let it run and the more CPU / memory it will need. This is why you should begin with very short CPU profiling, no more than a few seconds between the start and stop command. And never forget to monitor the impact of the profiler on your own infrastructure. If everything is fine you can increase the time and the frequency of CPU profiling.
                                    </p>
                                    <p id="049c" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        One more very important thing: <strong class="gq kj">never forget to always stop a started CPU profiling</strong>. You can add a timer to automatically call the stop function after a while.
                                    </p>
                                    <p id="0656" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        <strong class="gq kj">2) security</strong>
                                    </p>
                                    <p id="7999" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        Using the inspector in Node.js it’s like opening the door of the core of your application. You should be very careful about who can use features like CPU profiling and/or the debugger. Never make the inspector “public” as being able to launch a feature from an unsafe route (not protected with an authentification mechanism). Even the collected data can be seen as critical, never send it to a system you do not trust.
                                    </p>
                                    <h1 id="5618" class="gc gd dg ay ax ge di gf dk gg gh gi gj gk gl gm gn">
                                        Conclusion
                                    </h1>
                                    <p id="ae1a" class="go gp dg ay gq b gr gs gt gu gv gw gx gy gz ha hb cy">
                                        CPU profiling is really a must-have tool for every developer. And now, with some precautions, we can run it on production thanks to the amazing work done by the V8 and Node.js team.
                                    </p>
                                    <p id="1eab" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        The inspector module offers a lot more features than you can use to debug your application.
                                    </p>
                                    <p id="0aba" class="go gp dg ay gq b gr hg gt hh gv hi gx hj gz hk hb cy">
                                        I will write another article about using CPU profiling and the inspector on production on a high traffic project.
                                    </p>
                                    <h1 id="3c5b" class="gc gd dg ay ax ge di gf dk gg gh gi gj gk gl gm gn">
                                        Sources &amp; links
                                    </h1>
                                    <ul class="">
                                        <li id="d86d" class="go gp dg ay gq b gr gs gt gu gv gw gx gy gz ha hb kk kl km">
                                            <a href="https://nodejs.org/api/inspector.html" class="eq fo hc hd he hf" target="_blank" rel="noopener nofollow">https://nodejs.org/api/inspector.html</a>
                                        </li>
                                        <li id="cc52" class="go gp dg ay gq b gr kn gt ko gv kp gx kq gz kr hb kk kl km">
                                            <a href="https://chromedevtools.github.io/devtools-protocol/v8" class="eq fo hc hd he hf" target="_blank" rel="noopener nofollow">https://chromedevtools.github.io/devtools-protocol/v8</a>
                                        </li>
                                        <li id="d331" class="go gp dg ay gq b gr kn gt ko gv kp gx kq gz kr hb kk kl km">
                                            <a class="eq fo hc hd he hf" target="_blank" rel="noopener" href="/netflix-techblog/node-js-in-flames-ddd073803aa4">https://medium.com/netflix-techblog/node-js-in-flames-ddd073803aa4</a>
                                        </li>
                                        <li id="6420" class="go gp dg ay gq b gr kn gt ko gv kp gx kq gz kr hb kk kl km">
                                            <a href="https://www.npmjs.com/package/inspector-api" class="eq fo hc hd he hf" target="_blank" rel="noopener nofollow">https://www.npmjs.com/package/inspector-api</a>
                                        </li>
                                    </ul>
                                </div>
                            </div>
                        </section>
                    </div>
                </article>
                <div class="hw cx lq lr ai ly lw lz" data-test-id="post-sidebar">
                    <div class="n p">
                        <div class="z ab ac ae af ag ah ai">
                            <div class="ma n ct">
                                <div class="cx">
                                    <div class="mb mc r">
                                        <a href="/voodoo-engineering?source=post_sidebar--------------------------post_sidebar-" class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu" rel="noopener">
                                        <h2 class="ax ge md az dg">
                                            Voodoo Engineering
                                        </h2></a>
                                        <div class="me mf r">
                                            <h4 class="ax ej ek az by mg em en mh ep bc">
                                                Learn about Voodoo’s engineering efforts.
                                            </h4>
                                        </div>
                                        <div class="fn" aria-hidden="true">
                                            <button class="mi ex be bf mj bo bp mk bn fi ax b ay az ba bb fl fm cs fn fo bq">Follow</button>
                                        </div>
                                    </div>
                                    <div class="ml mm mn n">
                                        <div class="n o">
                                            <div class="mo r hu">
                                                <a href="https://medium.com/m/signin?operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fvoodoo-engineering%2Fnode-js-and-cpu-profiling-on-production-in-real-time-without-downtime-d6e62af173e2&amp;source=post_sidebar-----d6e62af173e2---------------------clap_sidebar-" class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu" rel="noopener">
                                                <div class="bl mp mq mr ms mt mu mv bf mw bp">
                                                    <svg width="29" height="29">
                                                    <g fill-rule="evenodd">
                                                        <path d="M13.74 1l.76 2.97.76-2.97zM16.82 4.78l1.84-2.56-1.43-.47zM10.38 2.22l1.84 2.56-.41-3.03zM22.38 22.62a5.11 5.11 0 0 1-3.16 1.61l.49-.45c2.88-2.89 3.45-5.98 1.69-9.21l-1.1-1.94-.96-2.02c-.31-.67-.23-1.18.25-1.55a.84.84 0 0 1 .66-.16c.34.05.66.28.88.6l2.85 5.02c1.18 1.97 1.38 5.12-1.6 8.1M9.1 22.1l-5.02-5.02a1 1 0 0 1 .7-1.7 1 1 0 0 1 .72.3l2.6 2.6a.44.44 0 0 0 .63-.62L6.1 15.04l-1.75-1.75a1 1 0 1 1 1.41-1.41l4.15 4.15a.44.44 0 0 0 .63 0 .44.44 0 0 0 0-.62L6.4 11.26l-1.18-1.18a1 1 0 0 1 0-1.4 1.02 1.02 0 0 1 1.41 0l1.18 1.16L11.96 14a.44.44 0 0 0 .62 0 .44.44 0 0 0 0-.63L8.43 9.22a.99.99 0 0 1-.3-.7.99.99 0 0 1 .3-.7 1 1 0 0 1 1.41 0l7 6.98a.44.44 0 0 0 .7-.5l-1.35-2.85c-.31-.68-.23-1.19.25-1.56a.85.85 0 0 1 .66-.16c.34.06.66.28.88.6L20.63 15c1.57 2.88 1.07 5.54-1.55 8.16a5.62 5.62 0 0 1-5.06 1.65 9.35 9.35 0 0 1-4.93-2.72zM13 6.98l2.56 2.56c-.5.6-.56 1.41-.15 2.28l.26.56-4.25-4.25a.98.98 0 0 1-.12-.45 1 1 0 0 1 .29-.7 1.02 1.02 0 0 1 1.41 0zm8.89 2.06c-.38-.56-.9-.92-1.49-1.01a1.74 1.74 0 0 0-1.34.33c-.38.29-.61.65-.71 1.06a2.1 2.1 0 0 0-1.1-.56 1.78 1.78 0 0 0-.99.13l-2.64-2.64a1.88 1.88 0 0 0-2.65 0 1.86 1.86 0 0 0-.48.85 1.89 1.89 0 0 0-2.67-.01 1.87 1.87 0 0 0-.5.9c-.76-.75-2-.75-2.7-.04a1.88 1.88 0 0 0 0 2.66c-.3.12-.61.29-.87.55a1.88 1.88 0 0 0 0 2.66l.62.62a1.88 1.88 0 0 0-.9 3.16l5.01 5.02c1.6 1.6 3.52 2.64 5.4 2.96a7.16 7.16 0 0 0 1.18.1c1.03 0 2-.25 2.9-.7A5.9 5.9 0 0 0 23 23.24c3.34-3.34 3.08-6.93 1.74-9.17l-2.87-5.04z"></path>
                                                    </g></svg>
                                                </div></a>
                                            </div>
                                            <div class="mx r">
                                                <div class="my">
                                                    <h4 class="ax ej ek az bc">
                                                        <button class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu">11</button>
                                                    </h4>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="mm r"></div><a href="https://medium.com/m/signin?operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fvoodoo-engineering%2Fnode-js-and-cpu-profiling-on-production-in-real-time-without-downtime-d6e62af173e2&amp;source=post_sidebar--------------------------bookmark_sidebar-" class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu" rel="noopener"><svg width="25" height="25" viewbox="0 0 25 25">
                                    <path d="M19 6a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v14.66h.01c.01.1.05.2.12.28a.5.5 0 0 0 .7.03l5.67-4.12 5.66 4.13a.5.5 0 0 0 .71-.03.5.5 0 0 0 .12-.29H19V6zm-6.84 9.97L7 19.64V6a1 1 0 0 1 1-1h9a1 1 0 0 1 1 1v13.64l-5.16-3.67a.49.49 0 0 0-.68 0z" fill-rule="evenodd"></path></svg></a>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="hw cx lq lr ls lt lu lv lw lx"></div>
                <div>
                    <div class="mz hr n ct p">
                        <div class="n p">
                            <div class="z ab ac ae af dd ah ai">
                                <div class="n na">
                                    <div class="r">
                                        <h4 class="ax ej fk az bc">
                                            Thanks to <!-- -->Clint FENTON<!-- -->.&#160;
                                        </h4>
                                    </div>
                                </div>
                                <div class="n o na"></div>
                                <div class="nb r">
                                    <ul class="bl bm">
                                        <li class="fn cc ga nc">
                                            <a href="/tag/nodejs" class="nd ne fo bc r jy nf a b fk">Nodejs</a>
                                        </li>
                                        <li class="fn cc ga nc">
                                            <a href="/tag/performance" class="nd ne fo bc r jy nf a b fk">Performance</a>
                                        </li>
                                        <li class="fn cc ga nc">
                                            <a href="/tag/cpu" class="nd ne fo bc r jy nf a b fk">Cpu</a>
                                        </li>
                                        <li class="fn cc ga nc">
                                            <a href="/tag/profiling" class="nd ne fo bc r jy nf a b fk">Profiling</a>
                                        </li>
                                        <li class="fn cc ga nc">
                                            <a href="/tag/inspector" class="nd ne fo bc r jy nf a b fk">Inspector</a>
                                        </li>
                                    </ul>
                                </div>
                                <div class="ng n dz y">
                                    <div class="n o">
                                        <div class="nh r hu">
                                            <a href="https://medium.com/m/signin?operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fvoodoo-engineering%2Fnode-js-and-cpu-profiling-on-production-in-real-time-without-downtime-d6e62af173e2&amp;source=post_actions_footer-----d6e62af173e2---------------------clap_footer-" class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu" rel="noopener">
                                            <div class="c ni ed n o nj hu nk nl nm nn no np nq nr ns nt nu nv nw mk">
                                                <div class="bl mp mq mr ms mt nx mv o ih ed n p ny u hy s t ai bf mw bp nz">
                                                    <svg width="33" height="33" viewbox="0 0 33 33">
                                                    <path d="M28.86 17.34l-3.64-6.4c-.3-.43-.71-.73-1.16-.8a1.12 1.12 0 0 0-.9.21c-.62.5-.73 1.18-.32 2.06l1.22 2.6 1.4 2.45c2.23 4.09 1.51 8-2.15 11.66a9.6 9.6 0 0 1-.8.71 6.53 6.53 0 0 0 4.3-2.1c3.82-3.82 3.57-7.87 2.05-10.39zm-6.25 11.08c3.35-3.35 4-6.78 1.98-10.47L21.2 12c-.3-.43-.71-.72-1.16-.8a1.12 1.12 0 0 0-.9.22c-.62.49-.74 1.18-.32 2.06l1.72 3.63a.5.5 0 0 1-.81.57l-8.91-8.9a1.33 1.33 0 0 0-1.89 1.88l5.3 5.3a.5.5 0 0 1-.71.7l-5.3-5.3-1.49-1.49c-.5-.5-1.38-.5-1.88 0a1.34 1.34 0 0 0 0 1.89l1.49 1.5 5.3 5.28a.5.5 0 0 1-.36.86.5.5 0 0 1-.36-.15l-5.29-5.29a1.34 1.34 0 0 0-1.88 0 1.34 1.34 0 0 0 0 1.89l2.23 2.23L9.3 21.4a.5.5 0 0 1-.36.85.5.5 0 0 1-.35-.14l-3.32-3.33a1.33 1.33 0 0 0-1.89 0 1.32 1.32 0 0 0-.39.95c0 .35.14.69.4.94l6.39 6.4c3.53 3.53 8.86 5.3 12.82 1.35zM12.73 9.26l5.68 5.68-.49-1.04c-.52-1.1-.43-2.13.22-2.89l-3.3-3.3a1.34 1.34 0 0 0-1.88 0 1.33 1.33 0 0 0-.4.94c0 .22.07.42.17.61zm14.79 19.18a7.46 7.46 0 0 1-6.41 2.31 7.92 7.92 0 0 1-3.67.9c-3.05 0-6.12-1.63-8.36-3.88l-6.4-6.4A2.31 2.31 0 0 1 2 19.72a2.33 2.33 0 0 1 1.92-2.3l-.87-.87a2.34 2.34 0 0 1 0-3.3 2.33 2.33 0 0 1 1.24-.64l-.14-.14a2.34 2.34 0 0 1 0-3.3 2.39 2.39 0 0 1 3.3 0l.14.14a2.33 2.33 0 0 1 3.95-1.24l.09.09c.09-.42.29-.83.62-1.16a2.34 2.34 0 0 1 3.3 0l3.38 3.39a2.17 2.17 0 0 1 1.27-.17c.54.08 1.03.35 1.45.76.1-.55.41-1.03.9-1.42a2.12 2.12 0 0 1 1.67-.4 2.8 2.8 0 0 1 1.85 1.25l3.65 6.43c1.7 2.83 2.03 7.37-2.2 11.6zM13.22.48l-1.92.89 2.37 2.83-.45-3.72zm8.48.88L19.78.5l-.44 3.7 2.36-2.84zM16.5 3.3L15.48 0h2.04L16.5 3.3z" fill-rule="evenodd"></path></svg>
                                                </div>
                                            </div></a>
                                        </div>
                                        <div class="mx r">
                                            <div class="my">
                                                <h4 class="ax ej ek az dg">
                                                    <button class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu">11 claps</button>
                                                </h4>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="n o">
                                        <div class="fx r au">
                                            <a href="//medium.com/p/d6e62af173e2/share/twitter?source=post_actions_footer---------------------------" class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu" target="_blank" rel="noopener nofollow"><svg width="29" height="29" class="q">
                                            <path d="M22.05 7.54a4.47 4.47 0 0 0-3.3-1.46 4.53 4.53 0 0 0-4.53 4.53c0 .35.04.7.08 1.05A12.9 12.9 0 0 1 5 6.89a5.1 5.1 0 0 0-.65 2.26c.03 1.6.83 2.99 2.02 3.79a4.3 4.3 0 0 1-2.02-.57v.08a4.55 4.55 0 0 0 3.63 4.44c-.4.08-.8.13-1.21.16l-.81-.08a4.54 4.54 0 0 0 4.2 3.15 9.56 9.56 0 0 1-5.66 1.94l-1.05-.08c2 1.27 4.38 2.02 6.94 2.02 8.3 0 12.86-6.9 12.84-12.85.02-.24 0-.43 0-.65a8.68 8.68 0 0 0 2.26-2.34c-.82.38-1.7.62-2.6.72a4.37 4.37 0 0 0 1.95-2.51c-.84.53-1.81.9-2.83 1.13z"></path></svg></a>
                                        </div>
                                        <div class="fx r au">
                                            <button class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu"><svg width="29" height="29" viewbox="0 0 29 29" fill="none" class="q">
                                            <path d="M5 6.36C5 5.61 5.63 5 6.4 5h16.2c.77 0 1.4.61 1.4 1.36v16.28c0 .75-.63 1.36-1.4 1.36H6.4c-.77 0-1.4-.6-1.4-1.36V6.36z"></path>
                                            <path fill-rule="evenodd" clip-rule="evenodd" d="M10.76 20.9v-8.57H7.89v8.58h2.87zm-1.44-9.75c1 0 1.63-.65 1.63-1.48-.02-.84-.62-1.48-1.6-1.48-.99 0-1.63.64-1.63 1.48 0 .83.62 1.48 1.59 1.48h.01zM12.35 20.9h2.87v-4.79c0-.25.02-.5.1-.7.2-.5.67-1.04 1.46-1.04 1.04 0 1.46.8 1.46 1.95v4.59h2.87v-4.92c0-2.64-1.42-3.87-3.3-3.87-1.55 0-2.23.86-2.61 1.45h.02v-1.24h-2.87c.04.8 0 8.58 0 8.58z" fill="#fff"></path></svg></button>
                                        </div>
                                        <div class="fx r au">
                                            <a href="//medium.com/p/d6e62af173e2/share/facebook?source=post_actions_footer---------------------------" class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu" target="_blank" rel="noopener nofollow"><svg width="29" height="29" class="q">
                                            <path d="M23.2 5H5.8a.8.8 0 0 0-.8.8V23.2c0 .44.35.8.8.8h9.3v-7.13h-2.38V13.9h2.38v-2.38c0-2.45 1.55-3.66 3.74-3.66 1.05 0 1.95.08 2.2.11v2.57h-1.5c-1.2 0-1.48.57-1.48 1.4v1.96h2.97l-.6 2.97h-2.37l.05 7.12h5.1a.8.8 0 0 0 .79-.8V5.8a.8.8 0 0 0-.8-.79"></path></svg></a>
                                        </div>
                                        <div class="oa r au">
                                            <a href="https://medium.com/m/signin?operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fvoodoo-engineering%2Fnode-js-and-cpu-profiling-on-production-in-real-time-without-downtime-d6e62af173e2&amp;source=post_actions_footer--------------------------bookmark_sidebar-" class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu" rel="noopener"><svg width="25" height="25" viewbox="0 0 25 25">
                                            <path d="M19 6a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v14.66h.01c.01.1.05.2.12.28a.5.5 0 0 0 .7.03l5.67-4.12 5.66 4.13a.5.5 0 0 0 .71-.03.5.5 0 0 0 .12-.29H19V6zm-6.84 9.97L7 19.64V6a1 1 0 0 1 1-1h9a1 1 0 0 1 1 1v13.64l-5.16-3.67a.49.49 0 0 0-.68 0z" fill-rule="evenodd"></path></svg></a>
                                        </div>
                                    </div>
                                </div>
                                <div class="ob bu oc nb r y">
                                    <div class="od oe r hu">
                                        <div class="r s oh oi">
                                            <span class="r of al og"><a rel="noopener" href="/@vincentvallet?source=follow_footer--------------------------follow_footer-"><img alt="Vincent Vallet" class="r ed cj oj" src="https://miro.medium.com/fit/c/160/160/1*vFTVh_mYyf0p6m7f77A3vw.jpeg" width="80" height="80" /></a></span>
                                        </div>
                                        <div class="ok r ol">
                                            <p class="ax ej fk az bc om on">
                                                <span class="r of al og">Written by</span>
                                            </p>
                                        </div>
                                        <div class="ok oo n ol">
                                            <div class="ai n o dz">
                                                <h2 class="ax ge op oq dg">
                                                    <span class="r of al og"><a class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu" rel="noopener" href="/@vincentvallet?source=follow_footer--------------------------follow_footer-">Vincent Vallet</a></span>
                                                </h2>
                                                <div class="r g">
                                                    <span class="r of al og"><button class="or ex be bf mj bo bp mk bn fi ax b ay az ba bb fl fm cs fn fo bq">Follow</button></span>
                                                </div>
                                            </div>
                                        </div>
                                        <div class="ok os r ol bw">
                                            <div class="ot r">
                                                <h4 class="ax ej md ou bc"></h4>
                                            </div>
                                            <div class="bv ov bw">
                                                <button class="or ex be bf mj bo bp mk bn fi ax b ay az ba bb fl fm cs fn fo bq">Follow</button>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="ob r"></div>
                                    <div class="od oe r hu">
                                        <div class="r s oh oi">
                                            <span class="r of al og"><a href="/voodoo-engineering?source=follow_footer--------------------------follow_footer-" rel="noopener"><img alt="Voodoo Engineering" class="fi oj cj" src="https://miro.medium.com/fit/c/160/160/1*ID7_awC5r-U-zTXrW6w0zA.jpeg" width="80" height="80" /></a></span>
                                        </div>
                                        <div class="ok oo n ol">
                                            <div class="ai n o dz">
                                                <h2 class="ax ge op oq dg">
                                                    <span class="r of al og"><a href="/voodoo-engineering?source=follow_footer--------------------------follow_footer-" class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu" rel="noopener">Voodoo Engineering</a></span>
                                                </h2>
                                                <div class="r g">
                                                    <div class="fn" aria-hidden="true">
                                                        <span class="r of al og"><button class="mi ex be bf mj bo bp mk bn fi ax b ay az ba bb fl fm cs fn fo bq">Follow</button></span>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                        <div class="ok ow r ol bw">
                                            <div class="ot r">
                                                <h4 class="ax ej md ou bc">
                                                    Learn about Voodoo’s engineering efforts.
                                                </h4>
                                            </div>
                                            <div class="bv ov bw">
                                                <div class="fn" aria-hidden="true">
                                                    <button class="mi ex be bf mj bo bp mk bn fi ax b ay az ba bb fl fm cs fn fo bq">Follow</button>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                                <div class="ox bu r y">
                                    <a href="https://medium.com/p/d6e62af173e2/responses/show?source=follow_footer--------------------------follow_footer-" class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu" rel="noopener">
                                    <div class="jx oz fi r ik g">
                                        <span class="iq oy ms"><span class="be">Write the first response</span></span>
                                    </div></a>
                                </div>
                            </div>
                        </div>
                        <div class="pa r pb y">
                            <div class="n p">
                                <div class="z ab ac ae af ag ah ai">
                                    <div class="pc r pd">
                                        <div class="pe mc od r">
                                            <h2 class="ax ge pf pg dg">
                                                More From Medium
                                            </h2>
                                        </div>
                                        <div class="cg n ph na pi pj pk pl pm pn po pp pq pr ps pt pu pv pw">
                                            <div class="px py pz la qa qb qc lc qd qe qf le qg qh qi qj qk ql qm qn qo">
                                                <div class="ai hy">
                                                    <div class="r qp">
                                                        <div class="qq qr pi pj pk qs qt pl pm pn qu qv po pp pq qw qx pr ps pt qy qz pu pv pw n na">
                                                            <div class="px py pz la qa qb ra rb qd qe rc rd qg qh re rf qk ql rg rh qo">
                                                                <div class="ri r rj f">
                                                                    <h4 class="ax ej ek az bc">
                                                                        More on Nodejs from Voodoo Engineering
                                                                    </h4>
                                                                </div>
                                                                <div class="rk r rl pd">
                                                                    <a class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu r" rel="noopener" href="/voodoo-engineering/websockets-on-production-with-node-js-bdc82d07bb9f?source=post_recirc---------0------------------">
                                                                    <div class="rm hu">
                                                                        <div class="hy s ai">
                                                                            <div class="rn r ro rp hy ai rq rr"></div>
                                                                        </div>
                                                                    </div></a>
                                                                </div>
                                                            </div>
                                                            <div class="px py pz la qa qb ra rb qd qe rc rd qg qh re rf qk ql rg rh qo">
                                                                <div class="rk r">
                                                                    <div class="rs bv h rt">
                                                                        <h4 class="ax ej ek az bc">
                                                                            More on Nodejs from Voodoo Engineering
                                                                        </h4>
                                                                    </div><a rel="noopener" href="/voodoo-engineering/websockets-on-production-with-node-js-bdc82d07bb9f?source=post_recirc---------0------------------">
                                                                    <h3 class="dg q dh ru ay ir rv rw">
                                                                        WebSockets on production with Node.js
                                                                    </h3></a>
                                                                </div>
                                                                <div class="n o dz">
                                                                    <div class="rx r cb">
                                                                        <div class="o n">
                                                                            <div>
                                                                                <a rel="noopener" href="/@vincentvallet?source=post_recirc---------0------------------"><img alt="Vincent Vallet" class="r ed ry rz" src="https://miro.medium.com/fit/c/80/80/1*vFTVh_mYyf0p6m7f77A3vw.jpeg" width="40" height="40" /></a>
                                                                            </div>
                                                                            <div class="eg ai r">
                                                                                <div class="n">
                                                                                    <div style="flex:1">
                                                                                        <div class="ck n o ei">
                                                                                            <span class="ax b ay az ba bb r dg q"><span class="ax ej ek az by el em en eo ep dg"><a class="eq er bg bh bi bj bk bl bm bn es bq br et eu" rel="noopener" href="/@vincentvallet?source=post_recirc---------0------------------">Vincent Vallet</a> <span><!-- -->in<!-- --> <a href="/voodoo-engineering?source=post_recirc---------0------------------" class="eq er bg bh bi bj bk bl bm bn es bq br et eu" rel="noopener">Voodoo Engineering</a></span></span></span>
                                                                                        </div>
                                                                                    </div>
                                                                                </div>
                                                                                <div>
                                                                                    <span class="ax b ay az ba bb r bc bd"><a class="eq er bg bh bi bj bk bl bm bn es bq br et eu" rel="noopener" href="/voodoo-engineering/websockets-on-production-with-node-js-bdc82d07bb9f?source=post_recirc---------0------------------">Mar 11</a> <!-- -->·<!-- --> <!-- -->5<!-- --> min read</span>
                                                                                </div>
                                                                            </div>
                                                                        </div>
                                                                    </div>
                                                                    <div class="n o">
                                                                        <div class="n o">
                                                                            <div class="mo r hu">
                                                                                <a href="https://medium.com/m/signin?operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fvoodoo-engineering%2Fnode-js-and-cpu-profiling-on-production-in-real-time-without-downtime-d6e62af173e2&amp;source=post_recirc-----bdc82d07bb9f----0-----------------clap_preview-" class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu" rel="noopener">
                                                                                <div class="bl mp mq mr ms mt mu mv sa sb sc">
                                                                                    <svg width="25" height="25" viewbox="0 0 25 25">
                                                                                    <g fill-rule="evenodd">
                                                                                        <path d="M11.74 0l.76 2.97.76-2.97zM14.81 3.78l1.84-2.56-1.42-.47zM8.38 1.22l1.84 2.56L9.8.75zM20.38 21.62a5.11 5.11 0 0 1-3.16 1.61l.49-.45c2.88-2.89 3.45-5.98 1.69-9.21l-1.1-1.94-.96-2.02c-.31-.67-.23-1.18.25-1.55a.84.84 0 0 1 .66-.16c.34.05.66.28.88.6l2.85 5.02c1.18 1.97 1.38 5.12-1.6 8.1M7.1 21.1l-5.02-5.02a1 1 0 0 1 .7-1.7 1 1 0 0 1 .72.3l2.6 2.6a.44.44 0 0 0 .63-.62L4.1 14.04l-1.75-1.75a1 1 0 1 1 1.41-1.41l4.15 4.15a.44.44 0 0 0 .63 0 .44.44 0 0 0 0-.62L4.4 10.26 3.22 9.08a1 1 0 0 1 0-1.4 1.02 1.02 0 0 1 1.41 0l1.18 1.16L9.96 13a.44.44 0 0 0 .62 0 .44.44 0 0 0 0-.63L6.43 8.22a.99.99 0 0 1-.3-.7.99.99 0 0 1 .3-.7 1 1 0 0 1 1.41 0l7 6.98a.44.44 0 0 0 .7-.5l-1.35-2.85c-.31-.68-.23-1.19.25-1.56a.85.85 0 0 1 .66-.16c.34.06.66.28.88.6L18.63 14c1.57 2.88 1.07 5.54-1.55 8.16a5.62 5.62 0 0 1-5.06 1.65 9.35 9.35 0 0 1-4.93-2.72zM11 5.98l2.56 2.56c-.5.6-.56 1.41-.15 2.28l.26.56-4.25-4.25a.98.98 0 0 1-.12-.45 1 1 0 0 1 .29-.7 1.02 1.02 0 0 1 1.41 0zm8.89 2.06c-.38-.56-.9-.92-1.49-1.01a1.74 1.74 0 0 0-1.34.33c-.38.29-.61.65-.71 1.06a2.1 2.1 0 0 0-1.1-.56 1.78 1.78 0 0 0-.99.13l-2.64-2.64a1.88 1.88 0 0 0-2.65 0 1.86 1.86 0 0 0-.48.85 1.89 1.89 0 0 0-2.67-.01 1.87 1.87 0 0 0-.5.9c-.76-.75-2-.75-2.7-.04a1.88 1.88 0 0 0 0 2.66c-.3.12-.61.29-.87.55a1.88 1.88 0 0 0 0 2.66l.62.62a1.88 1.88 0 0 0-.9 3.16l5.01 5.02c1.6 1.6 3.52 2.64 5.4 2.96a7.16 7.16 0 0 0 1.18.1c1.03 0 2-.25 2.9-.7A5.9 5.9 0 0 0 21 22.24c3.34-3.34 3.08-6.93 1.74-9.17l-2.87-5.04z"></path>
                                                                                    </g></svg>
                                                                                </div></a>
                                                                            </div>
                                                                            <div class="mx r">
                                                                                <div class="my">
                                                                                    <h4 class="ax ej ek az bc">
                                                                                        42
                                                                                    </h4>
                                                                                </div>
                                                                            </div>
                                                                        </div>
                                                                        <div class="sd eg rx se ar r"></div>
                                                                        <div>
                                                                            <div class="fn" role="tooltip" aria-hidden="true">
                                                                                <a href="https://medium.com/m/signin?operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fvoodoo-engineering%2Fnode-js-and-cpu-profiling-on-production-in-real-time-without-downtime-d6e62af173e2&amp;source=post_recirc---------0-----------------bookmark_sidebar-" class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu" rel="noopener"><svg width="25" height="25" viewbox="0 0 25 25">
                                                                                <path d="M19 6a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v14.66h.01c.01.1.05.2.12.28a.5.5 0 0 0 .7.03l5.67-4.12 5.66 4.13a.5.5 0 0 0 .71-.03.5.5 0 0 0 .12-.29H19V6zm-6.84 9.97L7 19.64V6a1 1 0 0 1 1-1h9a1 1 0 0 1 1 1v13.64l-5.16-3.67a.49.49 0 0 0-.68 0z" fill-rule="evenodd"></path></svg></a>
                                                                            </div>
                                                                        </div>
                                                                    </div>
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </div>
                                                </div>
                                            </div>
                                            <div class="px py pz la qa qb qc lc qd qe qf le qg qh qi qj qk ql qm qn qo">
                                                <div class="ai hy">
                                                    <div class="r qp">
                                                        <div class="qq qr pi pj pk qs qt pl pm pn qu qv po pp pq qw qx pr ps pt qy qz pu pv pw n na">
                                                            <div class="px py pz la qa qb ra rb qd qe rc rd qg qh re rf qk ql rg rh qo">
                                                                <div class="ri r rj f">
                                                                    <h4 class="ax ej ek az bc">
                                                                        More on Nodejs from Voodoo Engineering
                                                                    </h4>
                                                                </div>
                                                                <div class="rk r rl pd">
                                                                    <a class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu r" rel="noopener" href="/voodoo-engineering/a-successful-voodoo-io-nodejs-meetup-on-13th-november-19b66e22711e?source=post_recirc---------1------------------">
                                                                    <div class="rm hu">
                                                                        <div class="hy s ai">
                                                                            <div class="sf r ro rp hy ai rq rr"></div>
                                                                        </div>
                                                                    </div></a>
                                                                </div>
                                                            </div>
                                                            <div class="px py pz la qa qb ra rb qd qe rc rd qg qh re rf qk ql rg rh qo">
                                                                <div class="rk r">
                                                                    <div class="rs bv h rt">
                                                                        <h4 class="ax ej ek az bc">
                                                                            More on Nodejs from Voodoo Engineering
                                                                        </h4>
                                                                    </div><a rel="noopener" href="/voodoo-engineering/a-successful-voodoo-io-nodejs-meetup-on-13th-november-19b66e22711e?source=post_recirc---------1------------------">
                                                                    <h3 class="dg q dh ru ay ir rv rw">
                                                                        A successful Voodoo.io NodeJS meetup on 13th November!
                                                                    </h3></a>
                                                                </div>
                                                                <div class="n o dz">
                                                                    <div class="rx r cb">
                                                                        <div class="o n">
                                                                            <div>
                                                                                <a rel="noopener" href="/@aymeric_roffe?source=post_recirc---------1------------------"><img alt="Aymeric Roffé" class="r ed ry rz" src="https://miro.medium.com/fit/c/80/80/0*mufGR_aMLhWdVKIO.jpg" width="40" height="40" /></a>
                                                                            </div>
                                                                            <div class="eg ai r">
                                                                                <div class="n">
                                                                                    <div style="flex:1">
                                                                                        <div class="ck n o ei">
                                                                                            <span class="ax b ay az ba bb r dg q"><span class="ax ej ek az by el em en eo ep dg"><a class="eq er bg bh bi bj bk bl bm bn es bq br et eu" rel="noopener" href="/@aymeric_roffe?source=post_recirc---------1------------------">Aymeric Roffé</a> <span><!-- -->in<!-- --> <a href="/voodoo-engineering?source=post_recirc---------1------------------" class="eq er bg bh bi bj bk bl bm bn es bq br et eu" rel="noopener">Voodoo Engineering</a></span></span></span>
                                                                                        </div>
                                                                                    </div>
                                                                                </div>
                                                                                <div>
                                                                                    <span class="ax b ay az ba bb r bc bd"><a class="eq er bg bh bi bj bk bl bm bn es bq br et eu" rel="noopener" href="/voodoo-engineering/a-successful-voodoo-io-nodejs-meetup-on-13th-november-19b66e22711e?source=post_recirc---------1------------------">Nov 20, 2019</a> <!-- -->·<!-- --> <!-- -->3<!-- --> min read</span>
                                                                                </div>
                                                                            </div>
                                                                        </div>
                                                                    </div>
                                                                    <div class="n o">
                                                                        <div class="n o">
                                                                            <div class="mo r hu">
                                                                                <a href="https://medium.com/m/signin?operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fvoodoo-engineering%2Fnode-js-and-cpu-profiling-on-production-in-real-time-without-downtime-d6e62af173e2&amp;source=post_recirc-----19b66e22711e----1-----------------clap_preview-" class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu" rel="noopener">
                                                                                <div class="bl mp mq mr ms mt mu mv sa sb sc">
                                                                                    <svg width="25" height="25" viewbox="0 0 25 25">
                                                                                    <g fill-rule="evenodd">
                                                                                        <path d="M11.74 0l.76 2.97.76-2.97zM14.81 3.78l1.84-2.56-1.42-.47zM8.38 1.22l1.84 2.56L9.8.75zM20.38 21.62a5.11 5.11 0 0 1-3.16 1.61l.49-.45c2.88-2.89 3.45-5.98 1.69-9.21l-1.1-1.94-.96-2.02c-.31-.67-.23-1.18.25-1.55a.84.84 0 0 1 .66-.16c.34.05.66.28.88.6l2.85 5.02c1.18 1.97 1.38 5.12-1.6 8.1M7.1 21.1l-5.02-5.02a1 1 0 0 1 .7-1.7 1 1 0 0 1 .72.3l2.6 2.6a.44.44 0 0 0 .63-.62L4.1 14.04l-1.75-1.75a1 1 0 1 1 1.41-1.41l4.15 4.15a.44.44 0 0 0 .63 0 .44.44 0 0 0 0-.62L4.4 10.26 3.22 9.08a1 1 0 0 1 0-1.4 1.02 1.02 0 0 1 1.41 0l1.18 1.16L9.96 13a.44.44 0 0 0 .62 0 .44.44 0 0 0 0-.63L6.43 8.22a.99.99 0 0 1-.3-.7.99.99 0 0 1 .3-.7 1 1 0 0 1 1.41 0l7 6.98a.44.44 0 0 0 .7-.5l-1.35-2.85c-.31-.68-.23-1.19.25-1.56a.85.85 0 0 1 .66-.16c.34.06.66.28.88.6L18.63 14c1.57 2.88 1.07 5.54-1.55 8.16a5.62 5.62 0 0 1-5.06 1.65 9.35 9.35 0 0 1-4.93-2.72zM11 5.98l2.56 2.56c-.5.6-.56 1.41-.15 2.28l.26.56-4.25-4.25a.98.98 0 0 1-.12-.45 1 1 0 0 1 .29-.7 1.02 1.02 0 0 1 1.41 0zm8.89 2.06c-.38-.56-.9-.92-1.49-1.01a1.74 1.74 0 0 0-1.34.33c-.38.29-.61.65-.71 1.06a2.1 2.1 0 0 0-1.1-.56 1.78 1.78 0 0 0-.99.13l-2.64-2.64a1.88 1.88 0 0 0-2.65 0 1.86 1.86 0 0 0-.48.85 1.89 1.89 0 0 0-2.67-.01 1.87 1.87 0 0 0-.5.9c-.76-.75-2-.75-2.7-.04a1.88 1.88 0 0 0 0 2.66c-.3.12-.61.29-.87.55a1.88 1.88 0 0 0 0 2.66l.62.62a1.88 1.88 0 0 0-.9 3.16l5.01 5.02c1.6 1.6 3.52 2.64 5.4 2.96a7.16 7.16 0 0 0 1.18.1c1.03 0 2-.25 2.9-.7A5.9 5.9 0 0 0 21 22.24c3.34-3.34 3.08-6.93 1.74-9.17l-2.87-5.04z"></path>
                                                                                    </g></svg>
                                                                                </div></a>
                                                                            </div>
                                                                            <div class="mx r">
                                                                                <div class="my">
                                                                                    <h4 class="ax ej ek az bc">
                                                                                        5
                                                                                    </h4>
                                                                                </div>
                                                                            </div>
                                                                        </div>
                                                                        <div class="sd eg rx se ar r"></div>
                                                                        <div>
                                                                            <div class="fn" role="tooltip" aria-hidden="true">
                                                                                <a href="https://medium.com/m/signin?operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fvoodoo-engineering%2Fnode-js-and-cpu-profiling-on-production-in-real-time-without-downtime-d6e62af173e2&amp;source=post_recirc---------1-----------------bookmark_sidebar-" class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu" rel="noopener"><svg width="25" height="25" viewbox="0 0 25 25">
                                                                                <path d="M19 6a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v14.66h.01c.01.1.05.2.12.28a.5.5 0 0 0 .7.03l5.67-4.12 5.66 4.13a.5.5 0 0 0 .71-.03.5.5 0 0 0 .12-.29H19V6zm-6.84 9.97L7 19.64V6a1 1 0 0 1 1-1h9a1 1 0 0 1 1 1v13.64l-5.16-3.67a.49.49 0 0 0-.68 0z" fill-rule="evenodd"></path></svg></a>
                                                                            </div>
                                                                        </div>
                                                                    </div>
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </div>
                                                </div>
                                            </div>
                                            <div class="px py pz la qa qb qc lc qd qe qf le qg qh qi qj qk ql qm qn qo">
                                                <div class="ai hy">
                                                    <div class="r qp">
                                                        <div class="qq qr pi pj pk qs qt pl pm pn qu qv po pp pq qw qx pr ps pt qy qz pu pv pw n na">
                                                            <div class="px py pz la qa qb ra rb qd qe rc rd qg qh re rf qk ql rg rh qo">
                                                                <div class="ri r rj f">
                                                                    <h4 class="ax ej ek az bc">
                                                                        Related reads
                                                                    </h4>
                                                                </div>
                                                                <div class="rk r rl pd">
                                                                    <a href="https://itnext.io/request-id-tracing-in-node-js-applications-c517c7dab62d?source=post_recirc---------2------------------" class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu r" rel="noopener nofollow">
                                                                    <div class="rm hu">
                                                                        <div class="hy s ai">
                                                                            <div class="sg r ro rp hy ai rq rr"></div>
                                                                        </div>
                                                                    </div></a>
                                                                </div>
                                                            </div>
                                                            <div class="px py pz la qa qb ra rb qd qe rc rd qg qh re rf qk ql rg rh qo">
                                                                <div class="rk r">
                                                                    <div class="rs bv h rt">
                                                                        <h4 class="ax ej ek az bc">
                                                                            Related reads
                                                                        </h4>
                                                                    </div><a href="https://itnext.io/request-id-tracing-in-node-js-applications-c517c7dab62d?source=post_recirc---------2------------------" rel="noopener nofollow">
                                                                    <h3 class="dg q dh ru ay ir rv rw">
                                                                        Request Id Tracing in Node.js Applications
                                                                    </h3></a>
                                                                </div>
                                                                <div class="n o dz">
                                                                    <div class="rx r cb">
                                                                        <div class="o n">
                                                                            <div>
                                                                                <a rel="noopener" href="/@apechkurov?source=post_recirc---------2------------------"><img alt="Andrey Pechkurov" class="r ed ry rz" src="https://miro.medium.com/fit/c/80/80/1*n5_aO67yi-62ToDsxnr4bw.png" width="40" height="40" /></a>
                                                                            </div>
                                                                            <div class="eg ai r">
                                                                                <div class="n">
                                                                                    <div style="flex:1">
                                                                                        <div class="ck n o ei">
                                                                                            <span class="ax b ay az ba bb r dg q"><span class="ax ej ek az by el em en eo ep dg"><a class="eq er bg bh bi bj bk bl bm bn es bq br et eu" rel="noopener" href="/@apechkurov?source=post_recirc---------2------------------">Andrey Pechkurov</a> <span><!-- -->in<!-- --> <a href="https://itnext.io/?source=post_recirc---------2------------------" class="eq er bg bh bi bj bk bl bm bn es bq br et eu" rel="noopener nofollow">ITNEXT</a></span></span></span>
                                                                                        </div>
                                                                                    </div>
                                                                                </div>
                                                                                <div>
                                                                                    <span class="ax b ay az ba bb r bc bd"><a href="https://itnext.io/request-id-tracing-in-node-js-applications-c517c7dab62d?source=post_recirc---------2------------------" class="eq er bg bh bi bj bk bl bm bn es bq br et eu" rel="noopener nofollow">Dec 6, 2018</a> <!-- -->·<!-- --> <!-- -->5<!-- --> min read</span>
                                                                                </div>
                                                                            </div>
                                                                        </div>
                                                                    </div>
                                                                    <div class="n o">
                                                                        <div class="n o">
                                                                            <div class="mo r hu">
                                                                                <a href="https://medium.com/m/signin?operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fvoodoo-engineering%2Fnode-js-and-cpu-profiling-on-production-in-real-time-without-downtime-d6e62af173e2&amp;source=post_recirc-----c517c7dab62d----2-----------------clap_preview-" class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu" rel="noopener">
                                                                                <div class="bl mp mq mr ms mt mu mv sa sb sc">
                                                                                    <svg width="25" height="25" viewbox="0 0 25 25">
                                                                                    <g fill-rule="evenodd">
                                                                                        <path d="M11.74 0l.76 2.97.76-2.97zM14.81 3.78l1.84-2.56-1.42-.47zM8.38 1.22l1.84 2.56L9.8.75zM20.38 21.62a5.11 5.11 0 0 1-3.16 1.61l.49-.45c2.88-2.89 3.45-5.98 1.69-9.21l-1.1-1.94-.96-2.02c-.31-.67-.23-1.18.25-1.55a.84.84 0 0 1 .66-.16c.34.05.66.28.88.6l2.85 5.02c1.18 1.97 1.38 5.12-1.6 8.1M7.1 21.1l-5.02-5.02a1 1 0 0 1 .7-1.7 1 1 0 0 1 .72.3l2.6 2.6a.44.44 0 0 0 .63-.62L4.1 14.04l-1.75-1.75a1 1 0 1 1 1.41-1.41l4.15 4.15a.44.44 0 0 0 .63 0 .44.44 0 0 0 0-.62L4.4 10.26 3.22 9.08a1 1 0 0 1 0-1.4 1.02 1.02 0 0 1 1.41 0l1.18 1.16L9.96 13a.44.44 0 0 0 .62 0 .44.44 0 0 0 0-.63L6.43 8.22a.99.99 0 0 1-.3-.7.99.99 0 0 1 .3-.7 1 1 0 0 1 1.41 0l7 6.98a.44.44 0 0 0 .7-.5l-1.35-2.85c-.31-.68-.23-1.19.25-1.56a.85.85 0 0 1 .66-.16c.34.06.66.28.88.6L18.63 14c1.57 2.88 1.07 5.54-1.55 8.16a5.62 5.62 0 0 1-5.06 1.65 9.35 9.35 0 0 1-4.93-2.72zM11 5.98l2.56 2.56c-.5.6-.56 1.41-.15 2.28l.26.56-4.25-4.25a.98.98 0 0 1-.12-.45 1 1 0 0 1 .29-.7 1.02 1.02 0 0 1 1.41 0zm8.89 2.06c-.38-.56-.9-.92-1.49-1.01a1.74 1.74 0 0 0-1.34.33c-.38.29-.61.65-.71 1.06a2.1 2.1 0 0 0-1.1-.56 1.78 1.78 0 0 0-.99.13l-2.64-2.64a1.88 1.88 0 0 0-2.65 0 1.86 1.86 0 0 0-.48.85 1.89 1.89 0 0 0-2.67-.01 1.87 1.87 0 0 0-.5.9c-.76-.75-2-.75-2.7-.04a1.88 1.88 0 0 0 0 2.66c-.3.12-.61.29-.87.55a1.88 1.88 0 0 0 0 2.66l.62.62a1.88 1.88 0 0 0-.9 3.16l5.01 5.02c1.6 1.6 3.52 2.64 5.4 2.96a7.16 7.16 0 0 0 1.18.1c1.03 0 2-.25 2.9-.7A5.9 5.9 0 0 0 21 22.24c3.34-3.34 3.08-6.93 1.74-9.17l-2.87-5.04z"></path>
                                                                                    </g></svg>
                                                                                </div></a>
                                                                            </div>
                                                                            <div class="mx r">
                                                                                <div class="my">
                                                                                    <h4 class="ax ej ek az bc">
                                                                                        827
                                                                                    </h4>
                                                                                </div>
                                                                            </div>
                                                                        </div>
                                                                        <div class="sd eg rx se ar r"></div>
                                                                        <div>
                                                                            <div class="fn" role="tooltip" aria-hidden="true">
                                                                                <a href="https://medium.com/m/signin?operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fvoodoo-engineering%2Fnode-js-and-cpu-profiling-on-production-in-real-time-without-downtime-d6e62af173e2&amp;source=post_recirc---------2-----------------bookmark_sidebar-" class="eq er bg bh bi bj bk bl bm bn fy fz bq br et eu" rel="noopener"><svg width="25" height="25" viewbox="0 0 25 25">
                                                                                <path d="M19 6a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v14.66h.01c.01.1.05.2.12.28a.5.5 0 0 0 .7.03l5.67-4.12 5.66 4.13a.5.5 0 0 0 .71-.03.5.5 0 0 0 .12-.29H19V6zm-6.84 9.97L7 19.64V6a1 1 0 0 1 1-1h9a1 1 0 0 1 1 1v13.64l-5.16-3.67a.49.49 0 0 0-.68 0z" fill-rule="evenodd"></path></svg></a>
                                                                            </div>
                                                                        </div>
                                                                    </div>
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="sh r si sj">
                    <section class="cp cq ai cs r sk sl sm sn so sp sq sr ss st su sv sw sx sy">
                        <div class="sz ta od n dz g">
                            <div class="tb n dz">
                                <div class="tc r td">
                                    <div class="te r">
                                        <a href="https://medium.com/about?autoplay=1&amp;source=post_page-----d6e62af173e2----------------------" class="eq er bg bh bi bj bk bl bm bn tf tg bq br th ti" rel="noopener">
                                        <h4 class="tj tk tl ax ge ay ou tm tn r">
                                            Discover <!-- -->Medium
                                        </h4></a>
                                    </div><span class="ax b ay az ba bb r to tp">Welcome to a place where words matter. On <!-- -->Medium<!-- -->, smart voices and original ideas take center stage - with no ads in sight.<!-- --> <a href="https://medium.com/about?autoplay=1&amp;source=post_page-----d6e62af173e2----------------------" class="eq er bg bh bi bj bk bl bm bn bq br th ti tq" rel="noopener">Watch</a></span>
                                </div>
                                <div class="tc r td">
                                    <div class="pe r">
                                        <a href="https://medium.com/topics?source=post_page-----d6e62af173e2----------------------" class="eq er bg bh bi bj bk bl bm bn tf tg bq br th ti" rel="noopener">
                                        <h4 class="tj tk tl ax ge ay ou tm tn r">
                                            Make <!-- -->Medium<!-- --> yours
                                        </h4></a>
                                    </div><span class="ax b ay az ba bb r to tp">Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox.<!-- --> <a href="https://medium.com/topics?source=post_page-----d6e62af173e2----------------------" class="eq er bg bh bi bj bk bl bm bn bq br th ti tq" rel="noopener">Explore</a></span>
                                </div>
                                <div class="tc r td">
                                    <div class="te r">
                                        <a class="eq er bg bh bi bj bk bl bm bn tf tg bq br th ti" rel="noopener" href="/membership?source=post_page-----d6e62af173e2----------------------">
                                        <h4 class="tj tk tl ax ge ay ou tm tn r">
                                            Become a member
                                        </h4></a>
                                    </div><span class="ax b ay az ba bb r to tp">Get unlimited access to the best stories on <!-- -->Medium<!-- --> — and support writers while you’re at it. Just $5/month.<!-- --> <a class="eq er bg bh bi bj bk bl bm bn bq br th ti tq" rel="noopener" href="/membership?source=post_page-----d6e62af173e2----------------------">Upgrade</a></span>
                                </div>
                            </div>
                        </div>
                        <div class="n o dz">
                            <a class="eq er bg bh bi bj bk bl bm bn tf tg bq br th ti" rel="noopener" href="/?source=post_page-----d6e62af173e2----------------------"><svg height="22" width="112" viewbox="0 0 111.5 22" class="tk">
                            <path d="M56.3 19.5c0 .4 0 .5.3.7l1.5 1.4v.1h-6.5V19c-.7 1.8-2.4 3-4.3 3-3.3 0-5.8-2.6-5.8-7.5 0-4.5 2.6-7.6 6.3-7.6 1.6-.1 3.1.8 3.8 2.4V3.2c0-.3-.1-.6-.3-.7l-1.4-1.4V1l6.5-.8v19.3zm-4.8-.8V9.5c-.5-.6-1.2-.9-1.9-.9-1.6 0-3.1 1.4-3.1 5.7 0 4 1.3 5.4 3 5.4.8.1 1.6-.3 2-1zm9.1 3.1V9.4c0-.3-.1-.6-.3-.7l-1.4-1.5v-.1h6.5v12.5c0 .4 0 .5.3.7l1.4 1.4v.1h-6.5zm-.2-19.2C60.4 1.2 61.5 0 63 0c1.4 0 2.6 1.2 2.6 2.6S64.4 5.3 63 5.3a2.6 2.6 0 0 1-2.6-2.7zm22.5 16.9c0 .4 0 .5.3.7l1.5 1.4v.1h-6.5v-3.2c-.6 2-2.4 3.4-4.5 3.4-2.9 0-4.4-2.1-4.4-6.2 0-1.9 0-4.1.1-6.5 0-.3-.1-.5-.3-.7L67.7 7v.1H74v8c0 2.6.4 4.4 2 4.4.9-.1 1.7-.6 2.1-1.3V9.5c0-.3-.1-.6-.3-.7l-1.4-1.5v-.2h6.5v12.4zm22 2.3c0-.5.1-6.5.1-7.9 0-2.6-.4-4.5-2.2-4.5-.9 0-1.8.5-2.3 1.3.2.8.3 1.7.3 2.5 0 1.8-.1 4.2-.1 6.5 0 .3.1.5.3.7l1.5 1.4v.1H96c0-.4.1-6.5.1-7.9 0-2.7-.4-4.5-2.2-4.5-.9 0-1.7.5-2.2 1.3v9c0 .4 0 .5.3.7l1.4 1.4v.1h-6.5V9.5c0-.3-.1-.6-.3-.7l-1.4-1.5v-.2h6.5v3.1a4.6 4.6 0 0 1 4.6-3.4c2.2 0 3.6 1.2 4.2 3.5.7-2.1 2.7-3.6 4.9-3.5 2.9 0 4.5 2.2 4.5 6.2 0 1.9-.1 4.2-.1 6.5-.1.3.1.6.3.7l1.4 1.4v.1h-6.6zm-81.4-2l1.9 1.9v.1h-9.8v-.1l2-1.9c.2-.2.3-.4.3-.7V7.3c0-.5 0-1.2.1-1.8L11.4 22h-.1L4.5 6.8c-.1-.4-.2-.4-.3-.6v10c-.1.7 0 1.3.3 1.9l2.7 3.6v.1H0v-.1L2.7 18c.3-.6.4-1.3.3-1.9v-11c0-.5-.1-1.1-.5-1.5L.7 1.1V1h7l5.8 12.9L18.6 1h6.8v.1l-1.9 2.2c-.2.2-.3.5-.3.7v15.2c0 .2.1.5.3.6zm7.6-5.9c0 3.8 1.9 5.3 4.2 5.3 1.9.1 3.6-1 4.4-2.7h.1c-.8 3.7-3.1 5.5-6.5 5.5-3.7 0-7.2-2.2-7.2-7.4 0-5.5 3.5-7.6 7.3-7.6 3.1 0 6.4 1.5 6.4 6.2v.8h-8.7zm0-.8h4.3v-.8c0-3.9-.8-4.9-2-4.9-1.4.1-2.3 1.6-2.3 5.7z"></path></svg></a>
                            <div class="tr ts n dz tt al">
                                <span class="ax b ay az ba bb r to tp"><a href="https://medium.com/about?autoplay=1&amp;source=post_page-----d6e62af173e2----------------------" class="eq er bg bh bi bj bk bl bm bn es bq br th ti" rel="noopener">About</a><a href="https://help.medium.com/?source=post_page-----d6e62af173e2----------------------" class="eq er bg bh bi bj bk bl bm bn es bq br th ti" rel="noopener">Help</a><a class="eq er bg bh bi bj bk bl bm bn es bq br th ti" rel="noopener" href="/policy/9db0094a1e0f?source=post_page-----d6e62af173e2----------------------">Legal</a></span>
                            </div>
                        </div>
                    </section>
                </div>
            </div>
        </div>
        <script src="https://cdn.optimizely.com/js/16180790160.js"></script>
        <script>
        <![CDATA[
        window.__BUILD_ID__ = "master-20200325-195611-72d3042672"
        ]]>
        </script>
        <script>
        <![CDATA[
        window.__GRAPHQL_URI__ = "https://medium.com/_/graphql"
        ]]>
        </script>
        <script>
        <![CDATA[
        window.__PRELOADED_STATE__ = {"config":{"nodeEnv":"production","version":"master-20200325-195611-72d3042672","productName":"Medium","publicUrl":"https:\u002F\u002Fcdn-client.medium.com\u002Flite","authDomain":"medium.com","authGoogleClientId":"216296035834-k1k6qe060s2tp2a2jam4ljdcms00sttg.apps.googleusercontent.com","favicon":"production","glyphUrl":"https:\u002F\u002Fglyph.medium.com","branchKey":"key_live_ofxXr2qTrrU9NqURK8ZwEhknBxiI6KBm","lightStep":{"name":"lite-web","host":"collector-medium.lightstep.com","token":"ce5be895bef60919541332990ac9fef2","appVersion":"master-20200325-195611-72d3042672"},"algolia":{"appId":"MQ57UUUQZ2","apiKeySearch":"394474ced050e3911ae2249ecc774921","indexPrefix":"medium_","host":"-dsn.algolia.net"},"recaptchaKey":"6Lfc37IUAAAAAKGGtC6rLS13R1Hrw_BqADfS1LRk","recaptcha3Key":"6Lf8R9wUAAAAABMI_85Wb8melS7Zj6ziuf99Yot5","datadog":{"clientToken":"pub853ea8d17ad6821d9f8f11861d23dfed","context":{"deployment":{"target":"production","tag":"master-20200325-195611-72d3042672","commit":"72d30426726903f840536f508f97acfb0cc9a4e7"}},"datacenter":"us"},"sentry":{"dsn":"https:\u002F\u002F589e367c28ca47b195ce200d1507d18b@sentry.io\u002F1423575","environment":"production"},"isAmp":false,"googleAnalyticsCode":"UA-24232453-2","signInWallCustomDomainCollectionIds":["3a8144eabfe3","336d898217ee","61061eb0c96b","138adf9c44c","819cc2aaeee0"],"mediumOwnedAndOperatedCollectionIds":["544c7006046e","bcc38c8f6edf","444d13b52878","8d6b8a439e32","92d2092dc598","1285ba81cada","cb8577c9149e","8ccfed20cbb2","ae2a65f35510","3f6ecf56618","7b6769f2748b","fc8964313712","ef8e90590e66","191186aaafa0","d944778ce714","bdc4052bbdba","88d9857e584e"],"tierOneDomains":["medium.com","thebolditalic.com","arcdigital.media","towardsdatascience.com","uxdesign.cc","codeburst.io","psiloveyou.xyz","writingcooperative.com","entrepreneurshandbook.co","prototypr.io","betterhumans.coach.me","theascent.pub"],"internalLinksPostIds":["0000","0001","0002","0003"],"defaultImages":{"avatar":{"imageId":"1*dmbNkD5D-u45r44go_cf0g.png","height":150,"width":150},"orgLogo":{"imageId":"1*OMF3fSqH8t4xBJ9-6oZDZw.png","height":106,"width":545},"postLogo":{"imageId":"1*3sela1OADrJr7dJk_CXaEQ.png","height":810,"width":1440}},"performanceTags":[],"collectionStructuredData":{"8d6b8a439e32":{"name":"Elemental","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fcdn-images-1.medium.com\u002Fmax\u002F980\u002F1*9ygdqoKprhwuTVKUM0DLPA@2x.png","width":980,"height":159}}},"3f6ecf56618":{"name":"Forge","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fcdn-images-1.medium.com\u002Fmax\u002F596\u002F1*uULpIlImcO5TDuBZ6lm7Lg@2x.png","width":596,"height":183}}},"ae2a65f35510":{"name":"GEN","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F264\u002F1*RdVZMdvfV3YiZTw6mX7yWA.png","width":264,"height":140}}},"88d9857e584e":{"name":"LEVEL","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F540\u002F1*JqYMhNX6KNNb2UlqGqO2WQ.png","width":540,"height":108}}},"7b6769f2748b":{"name":"Marker","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fcdn-images-1.medium.com\u002Fmax\u002F383\u002F1*haCUs0wF6TgOOvfoY-jEoQ@2x.png","width":383,"height":92}}},"444d13b52878":{"name":"OneZero","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F540\u002F1*cw32fIqCbRWzwJaoQw6BUg.png","width":540,"height":123}}},"8ccfed20cbb2":{"name":"Zora","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F540\u002F1*tZUQqRcCCZDXjjiZ4bDvgQ.png","width":540,"height":106}}}},"embeddedPostIds":{"coronavirus":"cd3010f9d81f"},"covidCollectionId":"8a9336e5bb4","embedPostRules":[]},"debug":{"requestId":"362f13d1-9bbb-4e1d-94b8-4c50f7fb3315","originalSpanCarrier":{"ot-tracer-spanid":"036cb79e1be8d2a3","ot-tracer-traceid":"13b077d2691fef38","ot-tracer-sampled":"true"}},"session":{"user":{"id":"lo_wtop8RY2OSAr"},"xsrf":""},"stats":{"itemCount":0,"sending":false,"timeout":null,"backup":{}},"navigation":{"branch":{"show":null,"hasRendered":null,"blockedByCTA":true},"hideGoogleOneTap":false,"hasRenderedGoogleOneTap":null,"currentLocation":"https:\u002F\u002Fmedium.com\u002Fvoodoo-engineering\u002Fnode-js-and-cpu-profiling-on-production-in-real-time-without-downtime-d6e62af173e2","host":"medium.com","hostname":"medium.com","susiModal":{"step":null,"operation":"register","reportEventInfo":{"eventName":"","data":{}}},"postRead":false},"client":{"isBot":false,"isEu":false,"isLinkedin":false,"isNativeMedium":false,"isCustomDomain":false},"multiVote":{"clapsPerPost":{}}}
        ]]>
        </script>
        <script>
        <![CDATA[
        window.__APOLLO_STATE__ = {"ROOT_QUERY":{"viewer":null,"variantFlags":[{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.0","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.1","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.2","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.3","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.4","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.5","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.6","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.7","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.8","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.9","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.10","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.11","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.12","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.13","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.14","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.15","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.16","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.17","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.18","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.19","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.20","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.21","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.22","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.23","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.24","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.25","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.26","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.27","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.28","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.29","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.30","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.31","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.32","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.33","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.34","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.35","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.36","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.37","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.38","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.39","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.40","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.41","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.42","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.43","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.44","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.45","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.46","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.47","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.48","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.49","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.50","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.51","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.52","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.53","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.54","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.55","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.56","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.57","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.58","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.59","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.60","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.61","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.62","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.63","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.64","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.65","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.66","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.67","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.68","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.69","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.70","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.71","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.72","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.73","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.74","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.75","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.76","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.77","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.78","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.79","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.80","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.81","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.82","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.83","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.84","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.85","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.86","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.87","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.88","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.89","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.90","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.91","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.92","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.93","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.94","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.95","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.96","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.97","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.98","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.99","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.100","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.101","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.102","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.103","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.104","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.105","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.106","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.107","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.108","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.109","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.110","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.111","typename":"VariantFlag"},{"type":"id","generated":true,"id":"ROOT_QUERY.variantFlags.112","typename":"VariantFlag"}],"meterPost({\"postId\":\"d6e62af173e2\",\"postMeteringOptions\":{}})":{"type":"id","generated":false,"id":"MeteringInfo:singleton","typename":"MeteringInfo"},"postResult({\"id\":\"d6e62af173e2\"})":{"type":"id","generated":false,"id":"Post:d6e62af173e2","typename":"Post"}},"ROOT_QUERY.variantFlags.0":{"name":"add_friction_to_signup","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.0.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.0.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.1":{"name":"allow_access","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.1.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.1.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.2":{"name":"allow_signup","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.2.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.2.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.3":{"name":"allow_test_auth","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.3.valueType","typename":"VariantFlagString"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.3.valueType":{"__typename":"VariantFlagString","value":"disallow"},"ROOT_QUERY.variantFlags.4":{"name":"assign_default_topic_to_posts","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.4.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.4.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.5":{"name":"available_annual_plan","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.5.valueType","typename":"VariantFlagString"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.5.valueType":{"__typename":"VariantFlagString","value":"2c754bcc2995"},"ROOT_QUERY.variantFlags.6":{"name":"available_monthly_plan","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.6.valueType","typename":"VariantFlagString"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.6.valueType":{"__typename":"VariantFlagString","value":"60e220181034"},"ROOT_QUERY.variantFlags.7":{"name":"branch_seo_metadata","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.7.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.7.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.8":{"name":"browsable_stream_config_bucket","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.8.valueType","typename":"VariantFlagString"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.8.valueType":{"__typename":"VariantFlagString","value":"curated-topics"},"ROOT_QUERY.variantFlags.9":{"name":"covid_19_cdc_banner","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.9.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.9.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.10":{"name":"disable_android_subscription_activity_carousel","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.10.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.10.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.11":{"name":"disable_gosocial_followers_that_you_follow","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.11.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.11.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.12":{"name":"disable_ios_resume_reading_toast","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.12.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.12.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.13":{"name":"disable_ios_subscription_activity_carousel","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.13.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.13.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.14":{"name":"disable_mobile_featured_chunk","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.14.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.14.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.15":{"name":"disable_post_recommended_from_friends_provider","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.15.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.15.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.16":{"name":"enable_android_local_currency","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.16.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.16.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.17":{"name":"enable_annual_renewal_reminder_email","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.17.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.17.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.18":{"name":"enable_app_flirty_thirty","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.18.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.18.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.19":{"name":"enable_auto_tier","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.19.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.19.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.20":{"name":"enable_automated_mission_control_triggers","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.20.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.20.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.21":{"name":"enable_blue_small_meter","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.21.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.21.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.22":{"name":"enable_branch_io","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.22.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.22.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.23":{"name":"enable_branding","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.23.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.23.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.24":{"name":"enable_branding_fonts","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.24.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.24.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.25":{"name":"enable_curation_priority_queue_experiment","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.25.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.25.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.26":{"name":"enable_dedicated_series_tab_api_ios","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.26.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.26.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.27":{"name":"enable_different_grid","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.27.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.27.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.28":{"name":"enable_digest_feature_logging","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.28.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.28.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.29":{"name":"enable_disregard_trunc_state_for_footer","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.29.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.29.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.30":{"name":"enable_edit_alt_text","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.30.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.30.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.31":{"name":"enable_email_sign_in_captcha","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.31.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.31.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.32":{"name":"enable_embedding_based_diversification","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.32.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.32.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.33":{"name":"enable_ev_mission_email_v3","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.33.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.33.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.34":{"name":"enable_expanded_feature_chunk_pool","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.34.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.34.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.35":{"name":"enable_filter_by_resend_rules","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.35.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.35.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.36":{"name":"enable_filter_expire_processor","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.36.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.36.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.37":{"name":"enable_first_name_on_paywall","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.37.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.37.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.38":{"name":"enable_free_corona_topic","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.38.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.38.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.39":{"name":"enable_google_one_tap","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.39.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.39.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.40":{"name":"enable_ios_post_stats","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.40.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.40.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.41":{"name":"enable_janky_spam_rules","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.41.valueType","typename":"VariantFlagString"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.41.valueType":{"__typename":"VariantFlagString","value":"users,posts"},"ROOT_QUERY.variantFlags.42":{"name":"enable_json_logs_trained_ranker","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.42.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.42.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.43":{"name":"enable_kafka_events","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.43.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.43.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.44":{"name":"enable_kbfd_rex","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.44.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.44.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.45":{"name":"enable_kbfd_rex_app_highlights","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.45.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.45.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.46":{"name":"enable_kbfd_rex_daily_digest","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.46.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.46.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.47":{"name":"enable_li_open_in_app","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.47.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.47.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.48":{"name":"enable_lite_notifications","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.48.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.48.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.49":{"name":"enable_lite_post","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.49.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.49.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.50":{"name":"enable_lite_post_cd","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.50.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.50.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.51":{"name":"enable_lite_post_highlights","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.51.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.51.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.52":{"name":"enable_lite_post_highlights_view_only","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.52.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.52.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.53":{"name":"enable_lite_profile","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.53.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.53.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.54":{"name":"enable_lite_pub_header_menu","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.54.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.54.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.55":{"name":"enable_lite_server_upstream_deadlines","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.55.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.55.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.56":{"name":"enable_lite_stories","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.56.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.56.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.57":{"name":"enable_lite_topics","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.57.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.57.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.58":{"name":"enable_lite_unread_notification_count_mutation","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.58.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.58.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.59":{"name":"enable_lo_homepage","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.59.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.59.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.60":{"name":"enable_lo_meter_swap","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.60.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.60.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.61":{"name":"enable_lo_open_in_app","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.61.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.61.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.62":{"name":"enable_logged_out_homepage_signup","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.62.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.62.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.63":{"name":"enable_login_code_flow","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.63.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.63.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.64":{"name":"enable_marketing_emails","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.64.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.64.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.65":{"name":"enable_media_resource_try_catch","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.65.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.65.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.66":{"name":"enable_membership_remove_section_a","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.66.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.66.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.67":{"name":"enable_minimal_meter_v2","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.67.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.67.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.68":{"name":"enable_miro_on_kubernetes","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.68.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.68.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.69":{"name":"enable_mk_branch_cleanup","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.69.valueType","typename":"VariantFlagString"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.69.valueType":{"__typename":"VariantFlagString","value":"app-button"},"ROOT_QUERY.variantFlags.70":{"name":"enable_ml_rank_modules","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.70.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.70.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.71":{"name":"enable_monthly_membership_default","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.71.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.71.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.72":{"name":"enable_more_on_coronavirus","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.72.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.72.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.73":{"name":"enable_mute","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.73.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.73.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.74":{"name":"enable_new_collaborative_filtering_data","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.74.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.74.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.75":{"name":"enable_new_suspended_page","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.75.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.75.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.76":{"name":"enable_new_three_dot_menu","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.76.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.76.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.77":{"name":"enable_newsletter_v3_landing_for_covid_only","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.77.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.77.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.78":{"name":"enable_optimizely","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.78.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.78.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.79":{"name":"enable_pardon_the_interruption_removal","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.79.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.79.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.80":{"name":"enable_parsely","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.80.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.80.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.81":{"name":"enable_patronus_on_kubernetes","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.81.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.81.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.82":{"name":"enable_popularity_feature","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.82.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.82.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.83":{"name":"enable_post_import","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.83.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.83.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.84":{"name":"enable_post_page_nav_stickiness_removal","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.84.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.84.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.85":{"name":"enable_post_seo_settings_screen","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.85.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.85.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.86":{"name":"enable_post_settings_screen","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.86.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.86.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.87":{"name":"enable_primary_topic_for_mobile","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.87.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.87.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.88":{"name":"enable_rito_upstream_deadlines","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.88.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.88.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.89":{"name":"enable_rtr_channel","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.89.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.89.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.90":{"name":"enable_save_to_medium","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.90.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.90.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.91":{"name":"enable_starspace","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.91.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.91.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.92":{"name":"enable_suggest_account","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.92.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.92.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.93":{"name":"enable_suggest_account_li","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.93.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.93.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.94":{"name":"enable_tick_landing_page","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.94.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.94.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.95":{"name":"enable_tipalti_onboarding","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.95.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.95.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.96":{"name":"enable_topic_lifecycle_email","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.96.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.96.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.97":{"name":"enable_tribute_landing_page","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.97.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.97.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.98":{"name":"enable_trumpland_landing_page","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.98.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.98.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.99":{"name":"featured_fc_and_ydr","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.99.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.99.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.100":{"name":"filter_low_scoring_users","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.100.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.100.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.101":{"name":"glyph_font_set","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.101.valueType","typename":"VariantFlagString"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.101.valueType":{"__typename":"VariantFlagString","value":"m2"},"ROOT_QUERY.variantFlags.102":{"name":"google_sign_in_android","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.102.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.102.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.103":{"name":"is_not_medium_subscriber","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.103.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.103.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.104":{"name":"new_transition_page","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.104.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.104.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.105":{"name":"pardon_the_interruption_4","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.105.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.105.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.106":{"name":"pub_sidebar","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.106.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.106.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.107":{"name":"rank_model","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.107.valueType","typename":"VariantFlagString"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.107.valueType":{"__typename":"VariantFlagString","value":"default"},"ROOT_QUERY.variantFlags.108":{"name":"redis_read_write_splitting","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.108.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.108.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.109":{"name":"share_post_linkedin","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.109.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.109.valueType":{"__typename":"VariantFlagBoolean","value":true},"ROOT_QUERY.variantFlags.110":{"name":"signin_services","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.110.valueType","typename":"VariantFlagString"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.110.valueType":{"__typename":"VariantFlagString","value":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple"},"ROOT_QUERY.variantFlags.111":{"name":"signup_services","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.111.valueType","typename":"VariantFlagString"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.111.valueType":{"__typename":"VariantFlagString","value":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple"},"ROOT_QUERY.variantFlags.112":{"name":"use_new_admin_topic_backend","valueType":{"type":"id","generated":true,"id":"$ROOT_QUERY.variantFlags.112.valueType","typename":"VariantFlagBoolean"},"__typename":"VariantFlag"},"$ROOT_QUERY.variantFlags.112.valueType":{"__typename":"VariantFlagBoolean","value":true},"MeteringInfo:singleton":{"__typename":"MeteringInfo","postIds":{"type":"json","json":[]},"maxUnlockCount":3,"unlocksRemaining":3},"Post:d6e62af173e2":{"__typename":"Post","id":"d6e62af173e2","visibility":"PUBLIC","latestPublishedVersion":"f7ff17b467b5","collection":{"type":"id","generated":false,"id":"Collection:6965894c8b8f","typename":"Collection"},"creator":{"type":"id","generated":false,"id":"User:ead7e4ca29dd","typename":"User"},"isLocked":false,"lockedSource":"LOCKED_POST_SOURCE_NONE","sequence":null,"mediumUrl":"https:\u002F\u002Fmedium.com\u002Fvoodoo-engineering\u002Fnode-js-and-cpu-profiling-on-production-in-real-time-without-downtime-d6e62af173e2","canonicalUrl":"","content({\"postMeteringOptions\":{}})":{"type":"id","generated":true,"id":"$Post:d6e62af173e2.content({\"postMeteringOptions\":{}})","typename":"PostContent"},"firstPublishedAt":1571419414816,"isPublished":true,"layerCake":0,"primaryTopic":null,"title":"Node.js and CPU profiling on production (in real-time without downtime)","isLimitedState":false,"pendingCollection":null,"shareKey":null,"statusForCollection":"APPROVED","readingTime":7.216037735849056,"readingList":"READING_LIST_NONE","allowResponses":true,"clapCount":11,"viewerClapCount":0,"license":"ALL_RIGHTS_RESERVED","tags":[{"type":"id","generated":false,"id":"Tag:nodejs","typename":"Tag"},{"type":"id","generated":false,"id":"Tag:performance","typename":"Tag"},{"type":"id","generated":false,"id":"Tag:cpu","typename":"Tag"},{"type":"id","generated":false,"id":"Tag:profiling","typename":"Tag"},{"type":"id","generated":false,"id":"Tag:inspector","typename":"Tag"}],"topics":[],"recirc({\"paging\":{\"limit\":3}})":{"type":"id","generated":true,"id":"$Post:d6e62af173e2.recirc({\"paging\":{\"limit\":3}})","typename":"RecircItemConnection"},"voterCount":7,"recommenders":[],"postResponses":{"type":"id","generated":true,"id":"$Post:d6e62af173e2.postResponses","typename":"PostResponses"},"responsesCount":0,"collaborators":[{"type":"id","generated":false,"id":"Collaborator:d6e62af173e2-aa221ef5cd0d","typename":"Collaborator"}],"translationSourcePost":null,"newsletterId":"","inResponseToPostResult":null,"inResponseToMediaResource":null,"curationEligibleAt":0,"isDistributionAlertDismissed":false,"audioVersionUrl":"","seoTitle":"","socialTitle":"","socialDek":"","metaDescription":"How to run a CPU profiling with Node.js on your production in real-time and without interruption of service.","latestPublishedAt":1571419414816,"previewContent":{"type":"id","generated":true,"id":"$Post:d6e62af173e2.previewContent","typename":"PreviewContent"},"previewImage":{"type":"id","generated":false,"id":"ImageMetadata:1*EO-pr4RolgcAOj_Uk1rpDA.png","typename":"ImageMetadata"},"updatedAt":1571419415066,"seoDescription":"","isSuspended":false},"Collection:6965894c8b8f":{"id":"6965894c8b8f","domain":null,"slug":"voodoo-engineering","__typename":"Collection","isAuroraVisible":false,"googleAnalyticsId":null,"customStyleSheet":null,"colorBehavior":"ACCENT_COLOR","favicon":{"type":"id","generated":false,"id":"ImageMetadata:","typename":"ImageMetadata"},"name":"Voodoo Engineering","logo":{"type":"id","generated":false,"id":"ImageMetadata:1*_LkVyEmY2-W1rlZD2__W5g.jpeg","typename":"ImageMetadata"},"avatar":{"type":"id","generated":false,"id":"ImageMetadata:1*ID7_awC5r-U-zTXrW6w0zA.jpeg","typename":"ImageMetadata"},"isEnrolledInHightower":false,"creator":{"type":"id","generated":false,"id":"User:2c3576658a8b","typename":"User"},"viewerIsEditor":false,"navItems":[],"colorPalette":{"type":"id","generated":true,"id":"$Collection:6965894c8b8f.colorPalette","typename":"ColorPalette"},"viewerCanEditOwnPosts":false,"viewerCanEditPosts":false,"viewerIsMuting":false,"description":"Learn about Voodoo’s engineering efforts.","viewerIsFollowing":false,"viewerIsSubscribedToLetters":false,"isUserSubscribedToCollectionEmails":false,"ampEnabled":false,"twitterUsername":null,"facebookPageId":null,"tagline":"Learn about Voodoo’s engineering efforts."},"User:ead7e4ca29dd":{"id":"ead7e4ca29dd","__typename":"User","isSuspended":false,"allowNotes":true,"name":"Vincent Vallet","isFollowing":null,"username":"vincentvallet","bio":"","imageId":"1*vFTVh_mYyf0p6m7f77A3vw.jpeg","mediumMemberAt":0,"isBlocking":null,"isMuting":null,"isPartnerProgramEnrolled":false,"twitterScreenName":""},"ImageMetadata:":{"id":"","__typename":"ImageMetadata"},"ImageMetadata:1*_LkVyEmY2-W1rlZD2__W5g.jpeg":{"id":"1*_LkVyEmY2-W1rlZD2__W5g.jpeg","originalWidth":2010,"originalHeight":1140,"__typename":"ImageMetadata"},"ImageMetadata:1*ID7_awC5r-U-zTXrW6w0zA.jpeg":{"id":"1*ID7_awC5r-U-zTXrW6w0zA.jpeg","__typename":"ImageMetadata"},"User:2c3576658a8b":{"id":"2c3576658a8b","__typename":"User","name":"Aymeric Roffé","username":"aymeric_roffe","bio":"","isFollowing":null,"imageId":"0*mufGR_aMLhWdVKIO.jpg","mediumMemberAt":0},"$Collection:6965894c8b8f.colorPalette":{"tintBackgroundSpectrum":null,"__typename":"ColorPalette","defaultBackgroundSpectrum":{"type":"id","generated":true,"id":"$Collection:6965894c8b8f.colorPalette.defaultBackgroundSpectrum","typename":"ColorSpectrum"},"highlightSpectrum":{"type":"id","generated":true,"id":"$Collection:6965894c8b8f.colorPalette.highlightSpectrum","typename":"ColorSpectrum"}},"$Collection:6965894c8b8f.colorPalette.defaultBackgroundSpectrum":{"backgroundColor":"#FFFFFFFF","colorPoints":[{"type":"id","generated":true,"id":"$Collection:6965894c8b8f.colorPalette.defaultBackgroundSpectrum.colorPoints.0","typename":"ColorPoint"},{"type":"id","generated":true,"id":"$Collection:6965894c8b8f.colorPalette.defaultBackgroundSpectrum.colorPoints.1","typename":"ColorPoint"},{"type":"id","generated":true,"id":"$Collection:6965894c8b8f.colorPalette.defaultBackgroundSpectrum.colorPoints.2","typename":"ColorPoint"},{"type":"id","generated":true,"id":"$Collection:6965894c8b8f.colorPalette.defaultBackgroundSpectrum.colorPoints.3","typename":"ColorPoint"}],"__typename":"ColorSpectrum"},"$Collection:6965894c8b8f.colorPalette.defaultBackgroundSpectrum.colorPoints.0":{"color":"#FF02B875","point":0,"__typename":"ColorPoint"},"$Collection:6965894c8b8f.colorPalette.defaultBackgroundSpectrum.colorPoints.1":{"color":"#FF00AB6B","point":0.1,"__typename":"ColorPoint"},"$Collection:6965894c8b8f.colorPalette.defaultBackgroundSpectrum.colorPoints.2":{"color":"#FF1C9963","point":0.2,"__typename":"ColorPoint"},"$Collection:6965894c8b8f.colorPalette.defaultBackgroundSpectrum.colorPoints.3":{"color":"#FF092E20","point":1,"__typename":"ColorPoint"},"$Collection:6965894c8b8f.colorPalette.highlightSpectrum":{"backgroundColor":"#FFFFFFFF","colorPoints":[{"type":"id","generated":true,"id":"$Collection:6965894c8b8f.colorPalette.highlightSpectrum.colorPoints.0","typename":"ColorPoint"},{"type":"id","generated":true,"id":"$Collection:6965894c8b8f.colorPalette.highlightSpectrum.colorPoints.1","typename":"ColorPoint"},{"type":"id","generated":true,"id":"$Collection:6965894c8b8f.colorPalette.highlightSpectrum.colorPoints.2","typename":"ColorPoint"},{"type":"id","generated":true,"id":"$Collection:6965894c8b8f.colorPalette.highlightSpectrum.colorPoints.3","typename":"ColorPoint"},{"type":"id","generated":true,"id":"$Collection:6965894c8b8f.colorPalette.highlightSpectrum.colorPoints.4","typename":"ColorPoint"}],"__typename":"ColorSpectrum"},"$Collection:6965894c8b8f.colorPalette.highlightSpectrum.colorPoints.0":{"color":"#FFFFFFFF","point":0,"__typename":"ColorPoint"},"$Collection:6965894c8b8f.colorPalette.highlightSpectrum.colorPoints.1":{"color":"#FFE9FDF0","point":0.1,"__typename":"ColorPoint"},"$Collection:6965894c8b8f.colorPalette.highlightSpectrum.colorPoints.2":{"color":"#FFE2FAEE","point":0.2,"__typename":"ColorPoint"},"$Collection:6965894c8b8f.colorPalette.highlightSpectrum.colorPoints.3":{"color":"#FFADFFCF","point":0.6,"__typename":"ColorPoint"},"$Collection:6965894c8b8f.colorPalette.highlightSpectrum.colorPoints.4":{"color":"#FF7DFFB3","point":1,"__typename":"ColorPoint"},"$Post:d6e62af173e2.content({\"postMeteringOptions\":{}})":{"isLockedPreviewOnly":false,"validatedShareKey":"","__typename":"PostContent","bodyModel":{"type":"id","generated":true,"id":"$Post:d6e62af173e2.content({\"postMeteringOptions\":{}}).bodyModel","typename":"RichText"}},"$Post:d6e62af173e2.content({\"postMeteringOptions\":{}}).bodyModel.sections.0":{"name":"40b1","startIndex":0,"textLayout":null,"imageLayout":null,"backgroundImage":null,"videoLayout":null,"backgroundVideo":null,"__typename":"Section"},"$Post:d6e62af173e2.content({\"postMeteringOptions\":{}}).bodyModel":{"sections":[{"type":"id","generated":true,"id":"$Post:d6e62af173e2.content({\"postMeteringOptions\":{}}).bodyModel.sections.0","typename":"Section"}],"paragraphs":[{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_0","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_1","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_2","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_3","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_4","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_5","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_6","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_7","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_8","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_9","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_10","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_11","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_12","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_13","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_14","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_15","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_16","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_17","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_18","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_19","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_20","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_21","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_22","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_23","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_24","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_25","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_26","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_27","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_28","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_29","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_30","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_31","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_32","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_33","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_34","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_35","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_36","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_37","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_38","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_39","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_40","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_41","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_42","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_43","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_44","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_45","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_46","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_47","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_48","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_49","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_50","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_51","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_52","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_53","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_54","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_55","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_56","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_57","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_58","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_59","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_60","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_61","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_62","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_63","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_64","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_65","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_66","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_67","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_68","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_69","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_70","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_71","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_72","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_73","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_74","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_75","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_76","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_77","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_78","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_79","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_80","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_81","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_82","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_83","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_84","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_85","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_86","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_87","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_88","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_89","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_90","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_91","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_92","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_93","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_94","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_95","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_96","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_97","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_98","typename":"Paragraph"},{"type":"id","generated":false,"id":"Paragraph:f7ff17b467b5_99","typename":"Paragraph"}],"__typename":"RichText"},"Paragraph:f7ff17b467b5_0":{"id":"f7ff17b467b5_0","name":"daf0","type":"H3","href":null,"layout":null,"metadata":null,"text":"Node.js and CPU profiling on production (in real-time without downtime)","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_1":{"id":"f7ff17b467b5_1","name":"0231","type":"H3","href":null,"layout":null,"metadata":null,"text":"Why CPU monitoring is important?","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_2":{"id":"f7ff17b467b5_2","name":"d2c1","type":"P","href":null,"layout":null,"metadata":null,"text":"I work at Voodoo, a French company that creates mobile video games. We have a lot of challenges with performance, availability, and scalability because of the insane amount of traffic our infrastructure supports (billions of events\u002Frequests per day …… no joke!). In this setting, every metric is important and gives us a lot of information about the state of our system.","hasDropCap":null,"dropCapImage":null,"markups":[{"type":"id","generated":true,"id":"Paragraph:f7ff17b467b5_2.markups.0","typename":"Markup"}],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_2.markups.0":{"type":"A","start":10,"end":16,"href":"http:\u002F\u002Fvoodoo.io\u002F","anchorType":"LINK","userId":null,"linkMetadata":null,"__typename":"Markup"},"Paragraph:f7ff17b467b5_3":{"id":"f7ff17b467b5_3","name":"0e89","type":"P","href":null,"layout":null,"metadata":null,"text":"When working with Node.js one of the most critical resources to monitor is the CPU. Most of the time, when working on a low traffic API or project we don’t realize how many simple lines of code can have a huge impact on CPU. On the other hand, when traffic increases, a simple mistake can cost dearly.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_4":{"id":"f7ff17b467b5_4","name":"292e","type":"H3","href":null,"layout":null,"metadata":null,"text":"Resources","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_5":{"id":"f7ff17b467b5_5","name":"1efa","type":"P","href":null,"layout":null,"metadata":null,"text":"What kind of resources does your application need? In most cases, we focus on memory and CPU. Good monitoring of these two elements is mandatory for an application running on production.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_6":{"id":"f7ff17b467b5_6","name":"dce9","type":"P","href":null,"layout":null,"metadata":null,"text":"For memory, constant monitoring is the best practice to track the worst developer nightmare a.k.a memory leak.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_7":{"id":"f7ff17b467b5_7","name":"a38c","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"type":"id","generated":false,"id":"ImageMetadata:1*5o3M5niyi911waUrKWVZ0Q.png","typename":"ImageMetadata"},"text":"Memory leak in action","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"ImageMetadata:1*5o3M5niyi911waUrKWVZ0Q.png":{"id":"1*5o3M5niyi911waUrKWVZ0Q.png","originalHeight":970,"originalWidth":1894,"focusPercentX":null,"focusPercentY":null,"alt":null,"__typename":"ImageMetadata"},"Paragraph:f7ff17b467b5_8":{"id":"f7ff17b467b5_8","name":"69dd","type":"P","href":null,"layout":null,"metadata":null,"text":"A good way to debug memory leak is a memory dump and\u002For memory sampling but this is not the subject.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_9":{"id":"f7ff17b467b5_9","name":"1fbc","type":"P","href":null,"layout":null,"metadata":null,"text":"(for more details about V8 and its garbage collector you can read my previous article here)","hasDropCap":null,"dropCapImage":null,"markups":[{"type":"id","generated":true,"id":"Paragraph:f7ff17b467b5_9.markups.0","typename":"Markup"}],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_9.markups.0":{"type":"A","start":86,"end":90,"href":"https:\u002F\u002Fmedium.com\u002Fvoodoo-engineering\u002Fnodejs-internals-v8-garbage-collector-a6eca82540ec","anchorType":"LINK","userId":null,"linkMetadata":null,"__typename":"Markup"},"Paragraph:f7ff17b467b5_10":{"id":"f7ff17b467b5_10","name":"6f9a","type":"PQ","href":null,"layout":null,"metadata":null,"text":"Stay focused on the CPU!","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_11":{"id":"f7ff17b467b5_11","name":"40e6","type":"P","href":null,"layout":null,"metadata":null,"text":"Most of the time we monitor this resource with a simple solution allowing us to get a graph representing CPU consumption over time. If we want to be reactive we add an alarm, based on a threshold, to warn us when CPU usage is too high.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_12":{"id":"f7ff17b467b5_12","name":"7b8b","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"type":"id","generated":false,"id":"ImageMetadata:1*8uOdeOfnUzTaFIY1r7oAMg.png","typename":"ImageMetadata"},"text":"Basic CPU monitoring","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"ImageMetadata:1*8uOdeOfnUzTaFIY1r7oAMg.png":{"id":"1*8uOdeOfnUzTaFIY1r7oAMg.png","originalHeight":230,"originalWidth":997,"focusPercentX":null,"focusPercentY":null,"alt":null,"__typename":"ImageMetadata"},"Paragraph:f7ff17b467b5_13":{"id":"f7ff17b467b5_13","name":"0728","type":"P","href":null,"layout":null,"metadata":null,"text":"And what next? We don’t have data about the state of the instance when the CPU usage has increased. So we can’t determine why we had this peak, at least not without an important time of debugging, comparing log, etc. This is exactly why you need to use CPU profiling.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_14":{"id":"f7ff17b467b5_14","name":"8d00","type":"H3","href":null,"layout":null,"metadata":null,"text":"CPU profiling: what’s the difference with CPU monitoring?","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_15":{"id":"f7ff17b467b5_15","name":"19fb","type":"PQ","href":null,"layout":null,"metadata":null,"text":"“Most commonly, profiling information serves to aid program optimization. Profiling is achieved by instrumenting either the program source code or its binary executable form using a tool called a profiler”","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_16":{"id":"f7ff17b467b5_16","name":"3e11","type":"P","href":null,"layout":null,"metadata":null,"text":"Basically, for Node.js, CPU profiling is nothing more than collecting data about functions which are CPU consuming. And ideally, get a graphic representation of the collected data a.k.a “flame graph” or “flame chart”.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_17":{"id":"f7ff17b467b5_17","name":"91c5","type":"P","href":null,"layout":null,"metadata":null,"text":"It will help you to track the exact file, line, and function which takes the most time to execute.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_18":{"id":"f7ff17b467b5_18","name":"088b","type":"H3","href":null,"layout":null,"metadata":null,"text":"What about existing solutions?","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_19":{"id":"f7ff17b467b5_19","name":"dd40","type":"H4","href":null,"layout":null,"metadata":null,"text":"Add arguments to Node.js","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_20":{"id":"f7ff17b467b5_20","name":"0306","type":"P","href":null,"layout":null,"metadata":null,"text":"Node.js provides a way to collect data about CPU with two command lines.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_21":{"id":"f7ff17b467b5_21","name":"66c8","type":"P","href":null,"layout":null,"metadata":null,"text":"The first command just executes your application, the argument just tells to V8 engine to collect data. When you stop your script all information is stored in a file.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_22":{"id":"f7ff17b467b5_22","name":"16bd","type":"PRE","href":null,"layout":null,"metadata":null,"text":"node --prof app.js","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_23":{"id":"f7ff17b467b5_23","name":"768f","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"type":"id","generated":false,"id":"ImageMetadata:1*e7gjTlzi55udTXbbPeEs2A.png","typename":"ImageMetadata"},"text":"Output of — prof","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"ImageMetadata:1*e7gjTlzi55udTXbbPeEs2A.png":{"id":"1*e7gjTlzi55udTXbbPeEs2A.png","originalHeight":534,"originalWidth":849,"focusPercentX":null,"focusPercentY":null,"alt":null,"__typename":"ImageMetadata"},"Paragraph:f7ff17b467b5_24":{"id":"f7ff17b467b5_24","name":"57a6","type":"P","href":null,"layout":null,"metadata":null,"text":"It is not very clear, is it?","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_25":{"id":"f7ff17b467b5_25","name":"abed","type":"P","href":null,"layout":null,"metadata":null,"text":"That’s why you just need to run this second command to transform your raw file into a more human-readable output.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_26":{"id":"f7ff17b467b5_26","name":"061c","type":"PRE","href":null,"layout":null,"metadata":null,"text":"node --prof-process isolate-0xnnnnn-v8.log \u003E processed.txt","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_27":{"id":"f7ff17b467b5_27","name":"c6ab","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"type":"id","generated":false,"id":"ImageMetadata:1*JJkRh7JihTUo2apW_9ZXAQ.png","typename":"ImageMetadata"},"text":"The output of — prof-process","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"ImageMetadata:1*JJkRh7JihTUo2apW_9ZXAQ.png":{"id":"1*JJkRh7JihTUo2apW_9ZXAQ.png","originalHeight":306,"originalWidth":754,"focusPercentX":null,"focusPercentY":null,"alt":null,"__typename":"ImageMetadata"},"Paragraph:f7ff17b467b5_28":{"id":"f7ff17b467b5_28","name":"85fa","type":"P","href":null,"layout":null,"metadata":null,"text":"It seems better, here you can determine which function consumes the most of CPU (percentage of the time).","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_29":{"id":"f7ff17b467b5_29","name":"9e54","type":"H4","href":null,"layout":null,"metadata":null,"text":"ClinicJs","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_30":{"id":"f7ff17b467b5_30","name":"176a","type":"P","href":null,"layout":null,"metadata":null,"text":"ClinicJs is a set of tools that allow you to collect data and display performance charts. With “clinic flame” you can generate a flame graph based on CPU consumption.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_31":{"id":"f7ff17b467b5_31","name":"4aeb","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"type":"id","generated":false,"id":"ImageMetadata:1*6wi5BlNNnykjZs0PufrvLQ.png","typename":"ImageMetadata"},"text":"Flame chart","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"ImageMetadata:1*6wi5BlNNnykjZs0PufrvLQ.png":{"id":"1*6wi5BlNNnykjZs0PufrvLQ.png","originalHeight":1534,"originalWidth":2880,"focusPercentX":null,"focusPercentY":null,"alt":null,"__typename":"ImageMetadata"},"Paragraph:f7ff17b467b5_32":{"id":"f7ff17b467b5_32","name":"5347","type":"P","href":null,"layout":null,"metadata":null,"text":"But once again, you have to stop your app, launch the tool, then terminate the script in order to display the graph (files are generated on the disk).","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_33":{"id":"f7ff17b467b5_33","name":"d6e6","type":"P","href":null,"layout":null,"metadata":null,"text":"For more details, you can see the project.","hasDropCap":null,"dropCapImage":null,"markups":[{"type":"id","generated":true,"id":"Paragraph:f7ff17b467b5_33.markups.0","typename":"Markup"}],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_33.markups.0":{"type":"A","start":34,"end":41,"href":"https:\u002F\u002Fclinicjs.org\u002F","anchorType":"LINK","userId":null,"linkMetadata":null,"__typename":"Markup"},"Paragraph:f7ff17b467b5_34":{"id":"f7ff17b467b5_34","name":"be18","type":"P","href":null,"layout":null,"metadata":null,"text":"To sum up, here is the list of drawbacks of the two previous solutions.","hasDropCap":null,"dropCapImage":null,"markups":[{"type":"id","generated":true,"id":"Paragraph:f7ff17b467b5_34.markups.0","typename":"Markup"}],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_34.markups.0":{"type":"STRONG","start":0,"end":9,"href":null,"anchorType":null,"userId":null,"linkMetadata":null,"__typename":"Markup"},"Paragraph:f7ff17b467b5_35":{"id":"f7ff17b467b5_35","name":"3bef","type":"ULI","href":null,"layout":null,"metadata":null,"text":"Downtime (you should kill your application to collect the data)","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_36":{"id":"f7ff17b467b5_36","name":"c0df","type":"ULI","href":null,"layout":null,"metadata":null,"text":"Performance overhead","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_37":{"id":"f7ff17b467b5_37","name":"27ec","type":"ULI","href":null,"layout":null,"metadata":null,"text":"Data collected locally","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_38":{"id":"f7ff17b467b5_38","name":"a4fd","type":"ULI","href":null,"layout":null,"metadata":null,"text":"Need external tools (ClinicJs)","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_39":{"id":"f7ff17b467b5_39","name":"3f2c","type":"P","href":null,"layout":null,"metadata":null,"text":"In conclusion: these are good solutions to debug on development environments and\u002For on a local machine.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_40":{"id":"f7ff17b467b5_40","name":"fcd9","type":"BQ","href":null,"layout":null,"metadata":null,"text":"Unfortunately, CPU issues have a worrying tendency to occur on production, and when you are not in front of your screen.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_41":{"id":"f7ff17b467b5_41","name":"13ef","type":"H3","href":null,"layout":null,"metadata":null,"text":"Inspector","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_42":{"id":"f7ff17b467b5_42","name":"294e","type":"P","href":null,"layout":null,"metadata":null,"text":"“Inspector” refers to an API thanks to which you can debug your application. By debugging we mean to be able to connect directly to the core of Node.js to collect real-time data about the process.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_43":{"id":"f7ff17b467b5_43","name":"ea23","type":"P","href":null,"layout":null,"metadata":null,"text":"A module, available since version 8.x of Node.js, provides this kind of feature. There are two advantages to use it:","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_44":{"id":"f7ff17b467b5_44","name":"ed54","type":"ULI","href":null,"layout":null,"metadata":null,"text":"it’s native (no additional installation required)","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_45":{"id":"f7ff17b467b5_45","name":"7992","type":"ULI","href":null,"layout":null,"metadata":null,"text":"it can be used programmatically (no interruption)","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_46":{"id":"f7ff17b467b5_46","name":"731f","type":"P","href":null,"layout":null,"metadata":null,"text":"And here is how to make a CPU profiling with this module:","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_47":{"id":"f7ff17b467b5_47","name":"fb1e","type":"IFRAME","href":null,"layout":"INSET_CENTER","metadata":null,"text":"","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":{"type":"id","generated":true,"id":"$Paragraph:f7ff17b467b5_47.iframe","typename":"Iframe"},"mixtapeMetadata":null},"MediaResource:e6590d28762ae9dc52a79fab03d9bfb4":{"id":"e6590d28762ae9dc52a79fab03d9bfb4","iframeSrc":"","iframeHeight":0,"iframeWidth":0,"title":"CPU profiling with inspector","__typename":"MediaResource"},"$Paragraph:f7ff17b467b5_47.iframe":{"mediaResource":{"type":"id","generated":false,"id":"MediaResource:e6590d28762ae9dc52a79fab03d9bfb4","typename":"MediaResource"},"__typename":"Iframe"},"Paragraph:f7ff17b467b5_48":{"id":"f7ff17b467b5_48","name":"79d1","type":"P","href":null,"layout":null,"metadata":null,"text":"As you can see, all the data is returned in variable “profile”. Basically, it’s a simple JSON object representing all the call stack and the CPU consumption for each function. And if you want to use an Async\u002Fawait syntax you can install the module “inspector-api”.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_49":{"id":"f7ff17b467b5_49","name":"c085","type":"PRE","href":null,"layout":null,"metadata":null,"text":"npm install inspector-api --save","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_50":{"id":"f7ff17b467b5_50","name":"195d","type":"P","href":null,"layout":null,"metadata":null,"text":"It also comes with a built-in exporter to send data to S3, with this method you don’t write anything on the disk!","hasDropCap":null,"dropCapImage":null,"markups":[{"type":"id","generated":true,"id":"Paragraph:f7ff17b467b5_50.markups.0","typename":"Markup"}],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_50.markups.0":{"type":"STRONG","start":76,"end":112,"href":null,"anchorType":null,"userId":null,"linkMetadata":null,"__typename":"Markup"},"Paragraph:f7ff17b467b5_51":{"id":"f7ff17b467b5_51","name":"7085","type":"IFRAME","href":null,"layout":"INSET_CENTER","metadata":null,"text":"","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":{"type":"id","generated":true,"id":"$Paragraph:f7ff17b467b5_51.iframe","typename":"Iframe"},"mixtapeMetadata":null},"MediaResource:a5c2cfaff5b466e10f3f24ac0dee3dd1":{"id":"a5c2cfaff5b466e10f3f24ac0dee3dd1","iframeSrc":"","iframeHeight":0,"iframeWidth":0,"title":"CPU profiling with inspector-api module","__typename":"MediaResource"},"$Paragraph:f7ff17b467b5_51.iframe":{"mediaResource":{"type":"id","generated":false,"id":"MediaResource:a5c2cfaff5b466e10f3f24ac0dee3dd1","typename":"MediaResource"},"__typename":"Iframe"},"Paragraph:f7ff17b467b5_52":{"id":"f7ff17b467b5_52","name":"964f","type":"P","href":null,"layout":null,"metadata":null,"text":"If you use another storage system you can just collect the data and export it by yourself.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_53":{"id":"f7ff17b467b5_53","name":"e0f0","type":"IFRAME","href":null,"layout":"INSET_CENTER","metadata":null,"text":"","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":{"type":"id","generated":true,"id":"$Paragraph:f7ff17b467b5_53.iframe","typename":"Iframe"},"mixtapeMetadata":null},"MediaResource:a258a6f9cd216401571004e3dffd693b":{"id":"a258a6f9cd216401571004e3dffd693b","iframeSrc":"","iframeHeight":0,"iframeWidth":0,"title":"CPU profiling","__typename":"MediaResource"},"$Paragraph:f7ff17b467b5_53.iframe":{"mediaResource":{"type":"id","generated":false,"id":"MediaResource:a258a6f9cd216401571004e3dffd693b","typename":"MediaResource"},"__typename":"Iframe"},"Paragraph:f7ff17b467b5_54":{"id":"f7ff17b467b5_54","name":"848b","type":"H3","href":null,"layout":null,"metadata":null,"text":"And now, CPU profiling on-demand!","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_55":{"id":"f7ff17b467b5_55","name":"6933","type":"P","href":null,"layout":null,"metadata":null,"text":"We have an API that we want to test with autocannon tool. At this step, our project is able to serve around 200 requests in 20 seconds. There is probably a mistake somewhere in the code which slows down our application.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_56":{"id":"f7ff17b467b5_56","name":"7948","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"type":"id","generated":false,"id":"ImageMetadata:1*cS9IXYGfMmgxaAUlC7oqOQ.png","typename":"ImageMetadata"},"text":"","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"ImageMetadata:1*cS9IXYGfMmgxaAUlC7oqOQ.png":{"id":"1*cS9IXYGfMmgxaAUlC7oqOQ.png","originalHeight":362,"originalWidth":847,"focusPercentX":null,"focusPercentY":null,"alt":null,"__typename":"ImageMetadata"},"Paragraph:f7ff17b467b5_57":{"id":"f7ff17b467b5_57","name":"fb78","type":"P","href":null,"layout":null,"metadata":null,"text":"But now, what if we want to trigger a CPU profiling remotely (without ssh connection to the server)? It’s possible using Websocket, SSE or any other technology to send a message to your instance.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_58":{"id":"f7ff17b467b5_58","name":"2c91","type":"P","href":null,"layout":null,"metadata":null,"text":"Here is a simple example of a server using the “ws” module to send a message to a unique instance.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_59":{"id":"f7ff17b467b5_59","name":"c1d6","type":"IFRAME","href":null,"layout":"INSET_CENTER","metadata":null,"text":"","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":{"type":"id","generated":true,"id":"$Paragraph:f7ff17b467b5_59.iframe","typename":"Iframe"},"mixtapeMetadata":null},"MediaResource:feef2118ed0761bda1c2821a47c2297b":{"id":"feef2118ed0761bda1c2821a47c2297b","iframeSrc":"","iframeHeight":0,"iframeWidth":0,"title":"WS server","__typename":"MediaResource"},"$Paragraph:f7ff17b467b5_59.iframe":{"mediaResource":{"type":"id","generated":false,"id":"MediaResource:feef2118ed0761bda1c2821a47c2297b","typename":"MediaResource"},"__typename":"Iframe"},"Paragraph:f7ff17b467b5_60":{"id":"f7ff17b467b5_60","name":"2206","type":"P","href":null,"layout":null,"metadata":null,"text":"Of course, it only works with one instance, but it’s a fake project to demonstrate the principle ;)","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_61":{"id":"f7ff17b467b5_61","name":"e92d","type":"P","href":null,"layout":null,"metadata":null,"text":"Now we can request our server to ask it to send a message to our instance and start\u002Fstop a CPU profiling. In your instance, you can handle the CPU profiling like this:","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_62":{"id":"f7ff17b467b5_62","name":"7d09","type":"IFRAME","href":null,"layout":"INSET_CENTER","metadata":null,"text":"","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":{"type":"id","generated":true,"id":"$Paragraph:f7ff17b467b5_62.iframe","typename":"Iframe"},"mixtapeMetadata":null},"MediaResource:8a678f3011fef4d2c8296408f0b552fe":{"id":"8a678f3011fef4d2c8296408f0b552fe","iframeSrc":"","iframeHeight":0,"iframeWidth":0,"title":"WS client side","__typename":"MediaResource"},"$Paragraph:f7ff17b467b5_62.iframe":{"mediaResource":{"type":"id","generated":false,"id":"MediaResource:8a678f3011fef4d2c8296408f0b552fe","typename":"MediaResource"},"__typename":"Iframe"},"Paragraph:f7ff17b467b5_63":{"id":"f7ff17b467b5_63","name":"c3d0","type":"P","href":null,"layout":null,"metadata":null,"text":"To sum up: we are able to trigger a CPU profiling, on-demand, in real-time, without interruption or connection to the server. Data can be collected on the disk (and extracted later) or can be sent to S3 (or any other system, PR are welcomed on the inspector-api project).","hasDropCap":null,"dropCapImage":null,"markups":[{"type":"id","generated":true,"id":"Paragraph:f7ff17b467b5_63.markups.0","typename":"Markup"},{"type":"id","generated":true,"id":"Paragraph:f7ff17b467b5_63.markups.1","typename":"Markup"}],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_63.markups.0":{"type":"A","start":248,"end":269,"href":"https:\u002F\u002Fgithub.com\u002Fwallet77\u002Fv8-inspector-api","anchorType":"LINK","userId":null,"linkMetadata":null,"__typename":"Markup"},"Paragraph:f7ff17b467b5_63.markups.1":{"type":"STRONG","start":0,"end":9,"href":null,"anchorType":null,"userId":null,"linkMetadata":null,"__typename":"Markup"},"Paragraph:f7ff17b467b5_64":{"id":"f7ff17b467b5_64","name":"6e87","type":"BQ","href":null,"layout":null,"metadata":null,"text":"And because the profiler is a part of V8 itself, the format of the generated JSON file is compatible with the Chrome dev tools.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_65":{"id":"f7ff17b467b5_65","name":"1859","type":"IMG","href":null,"layout":"OUTSET_CENTER","metadata":{"type":"id","generated":false,"id":"ImageMetadata:1*CANkRN_yzl9tfrGd2F41wQ.png","typename":"ImageMetadata"},"text":"CPU profiling before optimization","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"ImageMetadata:1*CANkRN_yzl9tfrGd2F41wQ.png":{"id":"1*CANkRN_yzl9tfrGd2F41wQ.png","originalHeight":708,"originalWidth":1144,"focusPercentX":null,"focusPercentY":null,"alt":"CPU profiling before optimization","__typename":"ImageMetadata"},"Paragraph:f7ff17b467b5_66":{"id":"f7ff17b467b5_66","name":"2cda","type":"P","href":null,"layout":null,"metadata":null,"text":"How can we identify an issue?","hasDropCap":null,"dropCapImage":null,"markups":[{"type":"id","generated":true,"id":"Paragraph:f7ff17b467b5_66.markups.0","typename":"Markup"}],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_66.markups.0":{"type":"STRONG","start":0,"end":29,"href":null,"anchorType":null,"userId":null,"linkMetadata":null,"__typename":"Markup"},"Paragraph:f7ff17b467b5_67":{"id":"f7ff17b467b5_67","name":"e0d2","type":"P","href":null,"layout":null,"metadata":null,"text":"A CPU profiling should be read like this:","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_68":{"id":"f7ff17b467b5_68","name":"27e6","type":"ULI","href":null,"layout":null,"metadata":null,"text":"the x-axis shows the stack profile population","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_69":{"id":"f7ff17b467b5_69","name":"194a","type":"ULI","href":null,"layout":null,"metadata":null,"text":"the y-axis shows stack depth","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_70":{"id":"f7ff17b467b5_70","name":"e950","type":"P","href":null,"layout":null,"metadata":null,"text":"What does it mean?","hasDropCap":null,"dropCapImage":null,"markups":[{"type":"id","generated":true,"id":"Paragraph:f7ff17b467b5_70.markups.0","typename":"Markup"}],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_70.markups.0":{"type":"STRONG","start":0,"end":18,"href":null,"anchorType":null,"userId":null,"linkMetadata":null,"__typename":"Markup"},"Paragraph:f7ff17b467b5_71":{"id":"f7ff17b467b5_71","name":"174c","type":"P","href":null,"layout":null,"metadata":null,"text":"The larger is a box (a function call) the more it consumed CPU. So a good CPU profiling should look like a “flame” graph where each stack is the finest possible.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_72":{"id":"f7ff17b467b5_72","name":"48d9","type":"P","href":null,"layout":null,"metadata":null,"text":"In our example, every request try to generate a token. For this purpose, it calls the function pbkdf2 which is CPU consuming. Our CPU profile looks like a sequence of big blocks of time, like if the last function in the call stack takes 99% of the total time.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_73":{"id":"f7ff17b467b5_73","name":"d62c","type":"P","href":null,"layout":null,"metadata":null,"text":"The CPU profiling after optimizations, with the same time range.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_74":{"id":"f7ff17b467b5_74","name":"1325","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"type":"id","generated":false,"id":"ImageMetadata:1*87KlGgfbuWP38nAaQaj3xw.png","typename":"ImageMetadata"},"text":"CPU profiling after optimizations","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"ImageMetadata:1*87KlGgfbuWP38nAaQaj3xw.png":{"id":"1*87KlGgfbuWP38nAaQaj3xw.png","originalHeight":523,"originalWidth":930,"focusPercentX":null,"focusPercentY":null,"alt":null,"__typename":"ImageMetadata"},"Paragraph:f7ff17b467b5_75":{"id":"f7ff17b467b5_75","name":"10ee","type":"P","href":null,"layout":null,"metadata":null,"text":"As you can notice, we have to zoom to the profile if we want to see the call stack, because after optimizations the API was able to take a lot more traffic. Now every function in the call stack looks like a microtask.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_76":{"id":"f7ff17b467b5_76","name":"c339","type":"IMG","href":null,"layout":"OUTSET_CENTER","metadata":{"type":"id","generated":false,"id":"ImageMetadata:1*EO-pr4RolgcAOj_Uk1rpDA.png","typename":"ImageMetadata"},"text":"Zoom in the CPU profiling","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"ImageMetadata:1*EO-pr4RolgcAOj_Uk1rpDA.png":{"id":"1*EO-pr4RolgcAOj_Uk1rpDA.png","originalHeight":576,"originalWidth":1844,"focusPercentX":null,"focusPercentY":null,"alt":"CPU profiling after optimization","__typename":"ImageMetadata"},"Paragraph:f7ff17b467b5_77":{"id":"f7ff17b467b5_77","name":"10f1","type":"P","href":null,"layout":null,"metadata":null,"text":"And now our application is able to serve more than 200,000 requests in 20 seconds; we increased the performance by a factor of 100k!","hasDropCap":null,"dropCapImage":null,"markups":[{"type":"id","generated":true,"id":"Paragraph:f7ff17b467b5_77.markups.0","typename":"Markup"}],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_77.markups.0":{"type":"STRONG","start":83,"end":131,"href":null,"anchorType":null,"userId":null,"linkMetadata":null,"__typename":"Markup"},"Paragraph:f7ff17b467b5_78":{"id":"f7ff17b467b5_78","name":"a52e","type":"IMG","href":null,"layout":"INSET_CENTER","metadata":{"type":"id","generated":false,"id":"ImageMetadata:1*kfOK60PtmWx6iP681-qRcg.png","typename":"ImageMetadata"},"text":"","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"ImageMetadata:1*kfOK60PtmWx6iP681-qRcg.png":{"id":"1*kfOK60PtmWx6iP681-qRcg.png","originalHeight":362,"originalWidth":845,"focusPercentX":null,"focusPercentY":null,"alt":null,"__typename":"ImageMetadata"},"Paragraph:f7ff17b467b5_79":{"id":"f7ff17b467b5_79","name":"98b9","type":"H3","href":null,"layout":null,"metadata":null,"text":"More than just CPU profiling","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_80":{"id":"f7ff17b467b5_80","name":"e1ad","type":"P","href":null,"layout":null,"metadata":null,"text":"With the inspector module, you can do much more than just CPU profiling, here is a non-exhaustive list:","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_81":{"id":"f7ff17b467b5_81","name":"eb04","type":"ULI","href":null,"layout":null,"metadata":null,"text":"memory dump & memory sampling","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_82":{"id":"f7ff17b467b5_82","name":"a9ea","type":"ULI","href":null,"layout":null,"metadata":null,"text":"code coverage","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_83":{"id":"f7ff17b467b5_83","name":"b896","type":"ULI","href":null,"layout":null,"metadata":null,"text":"use the debugger in real-time","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_84":{"id":"f7ff17b467b5_84","name":"06d2","type":"H3","href":null,"layout":null,"metadata":null,"text":"Warnings","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_85":{"id":"f7ff17b467b5_85","name":"731b","type":"P","href":null,"layout":null,"metadata":null,"text":"Every tool, even the most powerful, comes with its own disadvantages. If you enable the profiler and\u002For the debugger on your production you have to keep an eye on two things:","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_86":{"id":"f7ff17b467b5_86","name":"e485","type":"P","href":null,"layout":null,"metadata":null,"text":"1) performance overhead","hasDropCap":null,"dropCapImage":null,"markups":[{"type":"id","generated":true,"id":"Paragraph:f7ff17b467b5_86.markups.0","typename":"Markup"}],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_86.markups.0":{"type":"STRONG","start":0,"end":23,"href":null,"anchorType":null,"userId":null,"linkMetadata":null,"__typename":"Markup"},"Paragraph:f7ff17b467b5_87":{"id":"f7ff17b467b5_87","name":"0513","type":"P","href":null,"layout":null,"metadata":null,"text":"A profiler needs to use CPU to work and it collects data into memory. The longer you let it run and the more CPU \u002F memory it will need. This is why you should begin with very short CPU profiling, no more than a few seconds between the start and stop command. And never forget to monitor the impact of the profiler on your own infrastructure. If everything is fine you can increase the time and the frequency of CPU profiling.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_88":{"id":"f7ff17b467b5_88","name":"049c","type":"P","href":null,"layout":null,"metadata":null,"text":"One more very important thing: never forget to always stop a started CPU profiling. You can add a timer to automatically call the stop function after a while.","hasDropCap":null,"dropCapImage":null,"markups":[{"type":"id","generated":true,"id":"Paragraph:f7ff17b467b5_88.markups.0","typename":"Markup"}],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_88.markups.0":{"type":"STRONG","start":31,"end":82,"href":null,"anchorType":null,"userId":null,"linkMetadata":null,"__typename":"Markup"},"Paragraph:f7ff17b467b5_89":{"id":"f7ff17b467b5_89","name":"0656","type":"P","href":null,"layout":null,"metadata":null,"text":"2) security","hasDropCap":null,"dropCapImage":null,"markups":[{"type":"id","generated":true,"id":"Paragraph:f7ff17b467b5_89.markups.0","typename":"Markup"}],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_89.markups.0":{"type":"STRONG","start":0,"end":11,"href":null,"anchorType":null,"userId":null,"linkMetadata":null,"__typename":"Markup"},"Paragraph:f7ff17b467b5_90":{"id":"f7ff17b467b5_90","name":"7999","type":"P","href":null,"layout":null,"metadata":null,"text":"Using the inspector in Node.js it’s like opening the door of the core of your application. You should be very careful about who can use features like CPU profiling and\u002For the debugger. Never make the inspector “public” as being able to launch a feature from an unsafe route (not protected with an authentification mechanism). Even the collected data can be seen as critical, never send it to a system you do not trust.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_91":{"id":"f7ff17b467b5_91","name":"5618","type":"H3","href":null,"layout":null,"metadata":null,"text":"Conclusion","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_92":{"id":"f7ff17b467b5_92","name":"ae1a","type":"P","href":null,"layout":null,"metadata":null,"text":"CPU profiling is really a must-have tool for every developer. And now, with some precautions, we can run it on production thanks to the amazing work done by the V8 and Node.js team.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_93":{"id":"f7ff17b467b5_93","name":"1eab","type":"P","href":null,"layout":null,"metadata":null,"text":"The inspector module offers a lot more features than you can use to debug your application.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_94":{"id":"f7ff17b467b5_94","name":"0aba","type":"P","href":null,"layout":null,"metadata":null,"text":"I will write another article about using CPU profiling and the inspector on production on a high traffic project.","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_95":{"id":"f7ff17b467b5_95","name":"3c5b","type":"H3","href":null,"layout":null,"metadata":null,"text":"Sources & links","hasDropCap":null,"dropCapImage":null,"markups":[],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_96":{"id":"f7ff17b467b5_96","name":"d86d","type":"ULI","href":null,"layout":null,"metadata":null,"text":"https:\u002F\u002Fnodejs.org\u002Fapi\u002Finspector.html","hasDropCap":null,"dropCapImage":null,"markups":[{"type":"id","generated":true,"id":"Paragraph:f7ff17b467b5_96.markups.0","typename":"Markup"}],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_96.markups.0":{"type":"A","start":0,"end":37,"href":"https:\u002F\u002Fnodejs.org\u002Fapi\u002Finspector.html","anchorType":"LINK","userId":null,"linkMetadata":null,"__typename":"Markup"},"Paragraph:f7ff17b467b5_97":{"id":"f7ff17b467b5_97","name":"cc52","type":"ULI","href":null,"layout":null,"metadata":null,"text":"https:\u002F\u002Fchromedevtools.github.io\u002Fdevtools-protocol\u002Fv8","hasDropCap":null,"dropCapImage":null,"markups":[{"type":"id","generated":true,"id":"Paragraph:f7ff17b467b5_97.markups.0","typename":"Markup"}],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_97.markups.0":{"type":"A","start":0,"end":53,"href":"https:\u002F\u002Fchromedevtools.github.io\u002Fdevtools-protocol\u002Fv8","anchorType":"LINK","userId":null,"linkMetadata":null,"__typename":"Markup"},"Paragraph:f7ff17b467b5_98":{"id":"f7ff17b467b5_98","name":"d331","type":"ULI","href":null,"layout":null,"metadata":null,"text":"https:\u002F\u002Fmedium.com\u002Fnetflix-techblog\u002Fnode-js-in-flames-ddd073803aa4","hasDropCap":null,"dropCapImage":null,"markups":[{"type":"id","generated":true,"id":"Paragraph:f7ff17b467b5_98.markups.0","typename":"Markup"}],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_98.markups.0":{"type":"A","start":0,"end":66,"href":"https:\u002F\u002Fmedium.com\u002Fnetflix-techblog\u002Fnode-js-in-flames-ddd073803aa4","anchorType":"LINK","userId":null,"linkMetadata":null,"__typename":"Markup"},"Paragraph:f7ff17b467b5_99":{"id":"f7ff17b467b5_99","name":"6420","type":"ULI","href":null,"layout":null,"metadata":null,"text":"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Finspector-api","hasDropCap":null,"dropCapImage":null,"markups":[{"type":"id","generated":true,"id":"Paragraph:f7ff17b467b5_99.markups.0","typename":"Markup"}],"__typename":"Paragraph","iframe":null,"mixtapeMetadata":null},"Paragraph:f7ff17b467b5_99.markups.0":{"type":"A","start":0,"end":43,"href":"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Finspector-api","anchorType":"LINK","userId":null,"linkMetadata":null,"__typename":"Markup"},"Tag:nodejs":{"id":"nodejs","displayTitle":"Nodejs","__typename":"Tag"},"Tag:performance":{"id":"performance","displayTitle":"Performance","__typename":"Tag"},"Tag:cpu":{"id":"cpu","displayTitle":"Cpu","__typename":"Tag"},"Tag:profiling":{"id":"profiling","displayTitle":"Profiling","__typename":"Tag"},"Tag:inspector":{"id":"inspector","displayTitle":"Inspector","__typename":"Tag"},"$Post:d6e62af173e2.recirc({\"paging\":{\"limit\":3}}).items.0":{"__typename":"SuggestedPost","post":{"type":"id","generated":false,"id":"Post:bdc82d07bb9f","typename":"Post"},"postSuggestionReasons":[{"type":"id","generated":true,"id":"$Post:d6e62af173e2.recirc({\"paging\":{\"limit\":3}}).items.0.postSuggestionReasons.0","typename":"PostSuggestionReason"}]},"Post:bdc82d07bb9f":{"__typename":"Post","id":"bdc82d07bb9f","title":"WebSockets on production with Node.js","isLocked":false,"previewImage":{"type":"id","generated":false,"id":"ImageMetadata:1*PgziD8xisQlGXkWMjDGz5w.png","typename":"ImageMetadata"},"isPublished":true,"mediumUrl":"https:\u002F\u002Fmedium.com\u002Fvoodoo-engineering\u002Fwebsockets-on-production-with-node-js-bdc82d07bb9f","firstPublishedAt":1583920514760,"readingTime":4.082075471698113,"statusForCollection":"APPROVED","visibility":"PUBLIC","collection":{"type":"id","generated":false,"id":"Collection:6965894c8b8f","typename":"Collection"},"creator":{"type":"id","generated":false,"id":"User:ead7e4ca29dd","typename":"User"},"previewContent":{"type":"id","generated":true,"id":"$Post:bdc82d07bb9f.previewContent","typename":"PreviewContent"},"readingList":"READING_LIST_NONE","clapCount":42,"viewerClapCount":0,"isLimitedState":false,"voterCount":4,"recommenders":[]},"ImageMetadata:1*PgziD8xisQlGXkWMjDGz5w.png":{"id":"1*PgziD8xisQlGXkWMjDGz5w.png","focusPercentX":null,"focusPercentY":null,"__typename":"ImageMetadata"},"$Post:bdc82d07bb9f.previewContent":{"isFullContent":false,"__typename":"PreviewContent"},"$Post:d6e62af173e2.recirc({\"paging\":{\"limit\":3}}).items.0.postSuggestionReasons.0":{"reason":"POSTS_SHARING_COLLECTION_AND_TAGS","users":[],"topics":[],"collections":[{"type":"id","generated":true,"id":"$Post:d6e62af173e2.recirc({\"paging\":{\"limit\":3}}).items.0.postSuggestionReasons.0.collections.0","typename":"SuggestionReasonCollection"}],"tags":[{"type":"id","generated":true,"id":"$Post:d6e62af173e2.recirc({\"paging\":{\"limit\":3}}).items.0.postSuggestionReasons.0.tags.0","typename":"SuggestionReasonTag"}],"__typename":"PostSuggestionReason"},"$Post:d6e62af173e2.recirc({\"paging\":{\"limit\":3}}).items.0.postSuggestionReasons.0.collections.0":{"name":"Voodoo Engineering","__typename":"SuggestionReasonCollection"},"$Post:d6e62af173e2.recirc({\"paging\":{\"limit\":3}}).items.0.postSuggestionReasons.0.tags.0":{"name":"Nodejs","__typename":"SuggestionReasonTag"},"$Post:d6e62af173e2.recirc({\"paging\":{\"limit\":3}}).items.1":{"__typename":"SuggestedPost","post":{"type":"id","generated":false,"id":"Post:19b66e22711e","typename":"Post"},"postSuggestionReasons":[{"type":"id","generated":true,"id":"$Post:d6e62af173e2.recirc({\"paging\":{\"limit\":3}}).items.1.postSuggestionReasons.0","typename":"PostSuggestionReason"}]},"Post:19b66e22711e":{"__typename":"Post","id":"19b66e22711e","title":"A successful Voodoo.io NodeJS meetup on 13th November!","isLocked":false,"previewImage":{"type":"id","generated":false,"id":"ImageMetadata:1*flvQZznQlpVs26M6SCL7DA.jpeg","typename":"ImageMetadata"},"isPublished":true,"mediumUrl":"https:\u002F\u002Fmedium.com\u002Fvoodoo-engineering\u002Fa-successful-voodoo-io-nodejs-meetup-on-13th-november-19b66e22711e","firstPublishedAt":1574277093966,"readingTime":2.6301886792452827,"statusForCollection":"APPROVED","visibility":"PUBLIC","collection":{"type":"id","generated":false,"id":"Collection:6965894c8b8f","typename":"Collection"},"creator":{"type":"id","generated":false,"id":"User:2c3576658a8b","typename":"User"},"previewContent":{"type":"id","generated":true,"id":"$Post:19b66e22711e.previewContent","typename":"PreviewContent"},"readingList":"READING_LIST_NONE","clapCount":5,"viewerClapCount":0,"isLimitedState":false,"voterCount":5,"recommenders":[]},"ImageMetadata:1*flvQZznQlpVs26M6SCL7DA.jpeg":{"id":"1*flvQZznQlpVs26M6SCL7DA.jpeg","focusPercentX":null,"focusPercentY":null,"__typename":"ImageMetadata"},"$Post:19b66e22711e.previewContent":{"isFullContent":false,"__typename":"PreviewContent"},"$Post:d6e62af173e2.recirc({\"paging\":{\"limit\":3}}).items.1.postSuggestionReasons.0":{"reason":"POSTS_SHARING_COLLECTION_AND_TAGS","users":[],"topics":[],"collections":[{"type":"id","generated":true,"id":"$Post:d6e62af173e2.recirc({\"paging\":{\"limit\":3}}).items.1.postSuggestionReasons.0.collections.0","typename":"SuggestionReasonCollection"}],"tags":[{"type":"id","generated":true,"id":"$Post:d6e62af173e2.recirc({\"paging\":{\"limit\":3}}).items.1.postSuggestionReasons.0.tags.0","typename":"SuggestionReasonTag"}],"__typename":"PostSuggestionReason"},"$Post:d6e62af173e2.recirc({\"paging\":{\"limit\":3}}).items.1.postSuggestionReasons.0.collections.0":{"name":"Voodoo Engineering","__typename":"SuggestionReasonCollection"},"$Post:d6e62af173e2.recirc({\"paging\":{\"limit\":3}}).items.1.postSuggestionReasons.0.tags.0":{"name":"Nodejs","__typename":"SuggestionReasonTag"},"$Post:d6e62af173e2.recirc({\"paging\":{\"limit\":3}}).items.2":{"__typename":"SuggestedPost","post":{"type":"id","generated":false,"id":"Post:c517c7dab62d","typename":"Post"},"postSuggestionReasons":[{"type":"id","generated":true,"id":"$Post:d6e62af173e2.recirc({\"paging\":{\"limit\":3}}).items.2.postSuggestionReasons.0","typename":"PostSuggestionReason"}]},"Post:c517c7dab62d":{"__typename":"Post","id":"c517c7dab62d","title":"Request Id Tracing in Node.js Applications","isLocked":false,"previewImage":{"type":"id","generated":false,"id":"ImageMetadata:0*sduEjXj8BCMSMYU1","typename":"ImageMetadata"},"isPublished":true,"mediumUrl":"https:\u002F\u002Fitnext.io\u002Frequest-id-tracing-in-node-js-applications-c517c7dab62d","firstPublishedAt":1544095557903,"readingTime":4.849056603773585,"statusForCollection":"APPROVED","visibility":"PUBLIC","collection":{"type":"id","generated":false,"id":"Collection:5b301f10ddcd","typename":"Collection"},"creator":{"type":"id","generated":false,"id":"User:9a27eb90e406","typename":"User"},"previewContent":{"type":"id","generated":true,"id":"$Post:c517c7dab62d.previewContent","typename":"PreviewContent"},"readingList":"READING_LIST_NONE","clapCount":827,"viewerClapCount":0,"isLimitedState":false,"voterCount":129,"recommenders":[]},"ImageMetadata:0*sduEjXj8BCMSMYU1":{"id":"0*sduEjXj8BCMSMYU1","focusPercentX":null,"focusPercentY":null,"__typename":"ImageMetadata"},"Collection:5b301f10ddcd":{"name":"ITNEXT","id":"5b301f10ddcd","slug":"itnext","domain":"itnext.io","__typename":"Collection"},"User:9a27eb90e406":{"name":"Andrey Pechkurov","username":"apechkurov","id":"9a27eb90e406","bio":"Developer\u002Ftech lead with 10+ years of experience. Good at Java and Node.js. Architectural design and challenging problems are the things that I love.","isFollowing":null,"imageId":"1*n5_aO67yi-62ToDsxnr4bw.png","mediumMemberAt":0,"__typename":"User"},"$Post:c517c7dab62d.previewContent":{"isFullContent":false,"__typename":"PreviewContent"},"$Post:d6e62af173e2.recirc({\"paging\":{\"limit\":3}}).items.2.postSuggestionReasons.0":{"reason":"CF_POST_SIMILAR_TO_POST","users":[],"topics":[],"collections":[],"tags":[],"__typename":"PostSuggestionReason"},"$Post:d6e62af173e2.recirc({\"paging\":{\"limit\":3}})":{"items":[{"type":"id","generated":true,"id":"$Post:d6e62af173e2.recirc({\"paging\":{\"limit\":3}}).items.0","typename":"SuggestedPost"},{"type":"id","generated":true,"id":"$Post:d6e62af173e2.recirc({\"paging\":{\"limit\":3}}).items.1","typename":"SuggestedPost"},{"type":"id","generated":true,"id":"$Post:d6e62af173e2.recirc({\"paging\":{\"limit\":3}}).items.2","typename":"SuggestedPost"}],"__typename":"RecircItemConnection"},"$Post:d6e62af173e2.postResponses":{"count":0,"__typename":"PostResponses","responsesConnection({\"paging\":{\"limit\":10}})":{"type":"id","generated":true,"id":"$Post:d6e62af173e2.postResponses.responsesConnection({\"paging\":{\"limit\":10}})","typename":"StreamConnection"}},"Collaborator:d6e62af173e2-aa221ef5cd0d":{"id":"d6e62af173e2-aa221ef5cd0d","user":{"type":"id","generated":false,"id":"User:aa221ef5cd0d","typename":"User"},"state":"visible","__typename":"Collaborator"},"User:aa221ef5cd0d":{"id":"aa221ef5cd0d","name":"Clint FENTON","__typename":"User"},"$Post:d6e62af173e2.previewContent":{"subtitle":"Why CPU monitoring is important?","__typename":"PreviewContent"},"$Post:d6e62af173e2.postResponses.responsesConnection({\"paging\":{\"limit\":10}})":{"pagingInfo":null,"stream":[],"__typename":"StreamConnection"}}
        ]]>
        </script>
        <script src="https://cdn-client.medium.com/lite/static/js/manifest.21b1a98a.js"></script>
        <script src="https://cdn-client.medium.com/lite/static/js/vendors~main.240983a1.chunk.js"></script>
        <script src="https://cdn-client.medium.com/lite/static/js/main.42357d13.chunk.js"></script>
        <script src="https://cdn-client.medium.com/lite/static/js/vendors~screen.collection.packageBuilder~screen.collection.styleEditor~screen.debug.cachedPost~scree~21f3676b.263ac94e.chunk.js"></script> 
        <script src="https://cdn-client.medium.com/lite/static/js/vendors~screen.collection.styleEditor~screen.debug.cachedPost~screen.post~screen.post.amp~screen.pos~f728b060.d9e25162.chunk.js"></script> 
        <script src="https://cdn-client.medium.com/lite/static/js/screen.collection.packageBuilder~screen.collection.styleEditor~screen.debug.cachedPost~screen.landin~fb9a2ae7.959766bf.chunk.js"></script> 
        <script src="https://cdn-client.medium.com/lite/static/js/screen.debug.cachedPost~screen.landingpages.tribute~screen.post~screen.post.amp~screen.profile~scree~92ba8b36.76054969.chunk.js"></script> 
        <script src="https://cdn-client.medium.com/lite/static/js/screen.post.5bea7e74.chunk.js"></script>
        <script>
        <![CDATA[
        window.main();
        ]]>
        </script>
        <script defer="defer" src="https://static.cloudflareinsights.com/beacon.min.js" data-cf-beacon="{&quot;rayId&quot;:&quot;579f1b721efea934&quot;,&quot;version&quot;:&quot;2020.3.0&quot;,&quot;startTime&quot;:1585207207597}"></script>
    </body>
</html>
